//
728x90
반응형

BOJ 1920 수 찾기

문제

N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 

이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 128 MB

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 

다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 

다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 

다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 

모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.

출력

M개의 줄에 답을 출력한다. 

존재하면 1을, 존재하지 않으면 0을 출력한다.

예제 입력 1

5
4 1 5 2 3
5
1 3 7 9 5

예제 출력 1

1
1
0
0
1

풀이

import sys

def search_num(a, x):
    start = 0
    end = len(a)-1

    while start <= end:
        mid = (start + end) // 2
        if x == a[mid]:
            return 1
        elif x > a[mid]:
            start = mid + 1
        else:
            end = mid - 1
    return 0

input = sys.stdin.readline
n = int(input())
a = list(map(int, input().split()))
a.sort()
m = int(input())
x = list(map(int, input().split()))

for i in range(m):
    print(search_num(a, x[i]))
728x90
반응형
728x90
반응형

BOJ 25305 커트라인

문제

2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 $N$명의 학생들이 응시했다.

이들 중 점수가 가장 높은 $k$명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.

커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.

시간 제한 : 1 초
메모리 제한 : 1024 MB

입력

첫째 줄에는 응시자의 수 N과 상을 받는 사람의 수 k가 공백을 사이에 두고 주어진다.

둘째 줄에는 각 학생의 점수 x가 공백을 사이에 두고 주어진다.

출력

상을 받는 커트라인을 출력하라.

제한

 1 ≤ N ≤ 1,000
 1 ≤ k ≤ N 
 0 ≤ x ≤ 10,000

예제 입력 1

5 2
100 76 85 93 98

예제 출력 1

98

풀이

n, k = map(int, input().split())
x = list(map(int, input().split()))

x.sort(reverse= True)

print(x[k-1])
728x90
반응형
728x90
반응형

BOJ 6996 애너그램

문제

두 단어 A와 B가 주어졌을 때, A에 속하는 알파벳의 순서를 바꾸어서 B를 만들 수 있다면, A와 B를 애너그램이라고 한다.

두 단어가 애너그램인지 아닌지 구하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 128 MB

입력

첫째 줄에 테스트 케이스의 개수(<100)가 주어진다. 

각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 100을 넘지 않는 단어가 공백으로 구분되어서 주어진다.

단어는 알파벳 소문자로만 이루어져 있다.

출력

각 테스트 케이스마다 애너그램인지 아닌지를 예체 출력과 같은 형식으로 출력한다.

출력 형식

정확한 출력 형식은 제출에서 언어를 Java로 설정하면 확인할 수 있다.

예제 입력 1

3
blather reblath
maryland landam
bizarre brazier

예제 출력 1

blather & reblath are anagrams.
maryland & landam are NOT anagrams.
bizarre & brazier are anagrams.

풀이

import sys

input = sys.stdin.readline
n = int(input())

for i in range(n):
    a, b = map(str, input().split())
    x = sorted(a)
    y = sorted(b)

    if x == y:
        print(a, "&", b, "are anagrams.")
    else:
        print(a, "&", b, "are NOT anagrams.")
728x90
반응형
728x90
반응형

BOJ 9076 점수 집계

문제

한국 체조협회에서는 심판의 오심을 막기 위하여 점수 집계 시스템을 고치기로 하였다. 

이전에는 5명의 심판이 1점부터 10점까지 정수의 점수를 주면 최고점과 최저점을 하나씩 제외한 점수의 합을 총점으로 하였다. 

이를 보완하기 위해서 최고점과 최저점을 뺀 나머지 3명 점수의 최고점과 최저점의 차이가 4점 이상 나게 되면 

점수 조정을 거쳐서 다시 점수를 매기려고 한다. 

점수를 집계하여 총점을 계산하거나, 점수 조정을 거쳐서 다시 점수를 매기려고 하는 경우에는 총점 대신 

KIN(Keep In Negotiation)을 출력하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 128 MB

입력

입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 

각 테스트 케이스는 한 줄에 다섯 심판이 준 점수 

다섯 개의 정수 Ni(1 ≤ Ni ≤ 10, i = 1, 2, ..., 5)가 하나의 공백을 사이에 두고 주어진다.

출력

각 테스트 케이스에 대해서 총점을 한 줄씩 출력한다. 

만일 점수 조정을 거쳐서 다시 점수를 매기려고 하는 경우에는 총점 대신 KIN을 출력한다.

예제 입력 1

4
10 8 5 7 9
10 9 10 9 5
10 3 5 9 10
1 2 3 6 9

예제 출력 1

24
28
KIN
KIN

풀이

t = int(input())

for _ in range(t):
    n = list(map(int, input().split()))
    n.sort()
    
    if abs(n[1]-n[3]) >= 4:
        print("KIN")
    else:
        print(sum(n)-max(n)-min(n))

 

728x90
반응형
728x90
반응형

BOJ 5576 콘테스트

문제

최근 온라인에서의 프로그래밍 콘테스트가 열렸다.

W 대학과 K 대학의 컴퓨터 클럽은 이전부터 라이벌 관계에있어,

이 콘테스트를 이용하여 양자의 우열을 정하자라는 것이되었다.

이번이 두 대학에서 모두 10 명씩이 콘테스트에 참여했다. 

긴 논의 끝에 참가한 10 명 중 득점이 높은 사람에서 3 명의 점수를 합산하여 대학의 득점으로하기로 했다.

W 대학 및 K 대학 참가자의 점수 데이터가 주어진다. 

이때, 각각의 대학의 점수를 계산하는 프로그램을 작성하라.

시간 제한 : 1초
메모리 제한 : 128 MB

입력

입력은 20 행으로 구성된다. 

1 번째 줄부터 10 번째 줄에는 W 대학의 각 참가자의 점수를 나타내는 정수가 

11 번째 줄부터 20 번째 줄에는 K 대학의 각 참가자의 점수를 나타내는 정수가 적혀있다. 

이 정수는 모두 0 이상 100 이하이다.

출력

W 대학 점수와 K 대학의 점수를 순서대로 공백으로 구분하여 출력하라.

예제 입력 1

23
23
20
15
15
14
13
9
7
6
25
19
17
17
16
13
12
11
9
5

예제 출력 1

66 61

예제 입력 2

17
25
23
25
79
29
1
61
59
100
44
74
94
57
13
54
82
0
42
45

예제 출력 2

240 250

풀이

import sys

input = sys.stdin.readline
w = []
k = []

for _ in range(10):
    w.append(int(input()))
for _ in range(10):
    k.append(int(input()))

w.sort()
k.sort()

print(sum(w[7:]), sum(k[7:]))
728x90
반응형
728x90
반응형

BOJ 5635 생일

문제

어떤 반에 있는 학생들의 생일이 주어졌을 때, 

가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 128 MB

입력

첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100)

다음 n개 줄에는 각 학생의 이름과 생일이 "이름 dd mm yyyy"와 같은 형식으로 주어진다. 

이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. 

(1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31) 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다.

이름이 같거나, 생일이 같은 사람은 없다.

출력

첫째 줄에 가장 나이가 적은 사람의 이름, 둘째 줄에 가장 나이가 많은 사람 이름을 출력한다.

예제 입력 1

5
Mickey 1 10 1991
Alice 30 12 1990
Tom 15 8 1993
Jerry 18 9 1990
Garfield 20 9 1990

예제 출력 1

Tom
Jerry

풀이

import sys

input = sys.stdin.readline
n = int(input())
arr = []

for _ in range(n):
    arr.append(input().split())
    
arr.sort(key=lambda x:(int(x[3]), int(x[2]), int(x[1])))

print(arr[-1][0])
print(arr[0][0])
728x90
반응형
728x90
반응형

BOJ 11557 Yangjojang of The Year

문제

입학 OT때 누구보다도 남다르게 놀았던 당신은 자연스럽게 1학년 과대를 역임하게 되었다.

타교와의 조인트 엠티를 기획하려는 당신은 근처에 있는 학교 중 어느 학교가 술을 가장 많이 먹는지 궁금해졌다.

학교별로 한 해동안 술 소비량이 주어질 때, 가장 술 소비가 많은 학교 이름을 출력하여라.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

입력의 첫 줄에는 테스트 케이스의 숫자 T가 주어진다.

매 입력의 첫 줄에는 학교의 숫자 정수 N(1 ≤ N ≤ 100)이 주어진다.

이어서 N줄에 걸쳐 학교 이름 S(1 ≤ |S| ≤ 20, S는 공백없는 대소문자 알파벳 문자열)와 

해당 학교가 지난 한 해동안 소비한 술의 양 L(0 ≤ L ≤ 10,000,000)이 공백으로 구분되어 정수로 주어진다.

같은 테스트 케이스 안에서 소비한 술의 양이 같은 학교는 없다고 가정한다.

출력

각 테스트 케이스마다 한 줄에 걸쳐 술 소비가 가장 많은 학교의 이름을 출력한다.

예제 입력 1

2
3
Yonsei 10
Korea 10000000
Ewha 20
2
Yonsei 1
Korea 10000000

예제 출력 1

Korea
Korea

풀이

import sys

input = sys.stdin.readline
t = int(input())

for _ in range(t):
    n = int(input())
    arr = []

    for _ in range(n):
        uni, drinks = input().rstrip().split()
        arr.append((uni, int(drinks)))

    arr.sort(key=lambda x:x[1])
    print(arr[-1][0])
728x90
반응형
728x90
반응형

BOJ 11931 수 정렬하기 4

문제

N개의 수가 주어졌을 때, 이를 내림차순으로 정렬하는 프로그램을 작성하시오.

시간 제한 : 2 초
메모리 제한 : 256 MB

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 

둘째 줄부터 N개의 줄에는 숫자가 주어진다. 

이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 

수는 중복되지 않는다.

출력

첫째 줄부터 N개의 줄에 내림차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

예제 입력 1

5
1
2
3
4
5

예제 출력 1

5
4
3
2
1

풀이

import sys
input = sys.stdin.readline

n = int(input())
nums = []
for _ in range(n):
    nums.append(int(input()))

nums.sort(reverse=True)

print(*nums, sep="\n")

 

728x90
반응형

+ Recent posts