//
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
반응형
728x90
반응형

BOJ 1431 시리얼 번호

문제

다솜이는 기타를 많이 가지고 있다. 

그리고 각각의 기타는 모두 다른 시리얼 번호를 가지고 있다. 

다솜이는 기타를 빨리 찾아서 빨리 사람들에게 연주해주기 위해서 기타를 시리얼 번호 순서대로 정렬하고자 한다.

모든 시리얼 번호는 알파벳 대문자 (A-Z)와 숫자 (0-9)로 이루어져 있다.

시리얼번호 A가 시리얼번호 B의 앞에 오는 경우는 다음과 같다.

    1. A와 B의 길이가 다르면, 짧은 것이 먼저 온다.

    2. 만약 서로 길이가 같다면, A의 모든 자리수의 합과 B의 모든 자리수의 합을 비교해서 
    작은 합을 가지는 것이 먼저온다. (숫자인 것만 더한다)

    3. 만약 1,2번 둘 조건으로도 비교할 수 없으면, 사전순으로 비교한다. 
    숫자가 알파벳보다 사전순으로 작다.

시리얼이 주어졌을 때, 정렬해서 출력하는 프로그램을 작성하시오.

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

입력

첫째 줄에 기타의 개수 N이 주어진다. 

N은 50보다 작거나 같다. 

둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 

시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어져 있다. 

시리얼 번호는 중복되지 않는다.

출력

첫째 줄부터 차례대로 N개의 줄에 한줄에 하나씩 시리얼 번호를 정렬한 결과를 출력한다.

예제 입력 1 

5
ABCD
145C
A
A910
Z321

예제 출력 1

A
ABCD
Z321
145C
A910

예제 입력 2

2
Z19
Z20

예제 출력 2

Z20
Z19

예제 입력 3

4
34H2BJS6N
PIM12MD7RCOLWW09
PYF1J14TF
FIPJOTEA5

예제 출력 3

FIPJOTEA5
PYF1J14TF
34H2BJS6N
PIM12MD7RCOLWW09

예제 입력 4

5
ABCDE
BCDEF
ABCDA
BAAAA
ACAAA

예제 출력 4

ABCDA
ABCDE
ACAAA
BAAAA
BCDEF

풀이

import sys

input = sys.stdin.readline
n = int(input())
serial = [input().strip() for _ in range(n)]

def getNum(str):
    res = 0
    for i in str:
        if i.isdigit():
            res += int(i)
    return res

serial.sort(key=lambda x: (len(x), getNum(x), x))

for j in serial:
    print(j)

 

728x90
반응형
728x90
반응형

BOJ 8979 올림픽

문제

올림픽은 참가에 의의가 있기에 공식적으로는 국가간 순위를 정하지 않는다. 

그러나, 많은 사람들이 자신의 국가가 얼마나 잘 하는지에 관심이 많기 때문에 비공식적으로는 국가간 순위를 정하고 있다. 

두 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 보통 다음 규칙을 따라 어느 나라가 더 잘했는지 결정한다.

    1. 금메달 수가 더 많은 나라 
    2. 금메달 수가 같으면, 은메달 수가 더 많은 나라
    3. 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라 

각 국가는 1부터 N 사이의 정수로 표현된다. 

한 국가의 등수는 (자신보다 더 잘한 나라 수) + 1로 정의된다. 

만약 두 나라가 금, 은, 동메달 수가 모두 같다면 두 나라의 등수는 같다. 

예를 들어, 1번 국가가 금메달 1개, 은메달 1개를 얻었고, 2번 국가와 3번 국가가 모두 은메달 1개를 얻었으며, 

4번 국가는 메달을 얻지 못하였다면, 1번 국가가 1등, 2번 국가와 3번 국가가 공동 2등, 4번 국가가 4등이 된다. 

이 경우 3등은 없다. 

각 국가의 금, 은, 동메달 정보를 입력받아서, 어느 국가가 몇 등을 했는지 알려주는 프로그램을 작성하시오. 

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

입력

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 

각 국가는 1부터 N 사이의 정수로 표현된다. 

이후 N개의 각 줄에는 차례대로 각 국가를 나타내는 정수와 이 국가가 얻은 금, 은, 동메달의 수가 

빈칸을 사이에 두고 주어진다. 

전체 메달 수의 총합은 1,000,000 이하이다.

출력

출력은 단 한 줄이며, 입력받은 국가 K의 등수를 하나의 정수로 출력한다. 

등수는 반드시 문제에서 정의된 방식을 따라야 한다.

서브태스크

번호 배점 제한
1 8 예제 입력, 출력
2 12 N = 2
3 20 모든 국가의 은메달 및 동메달 획득 수는 0
4 25 N ≤ 500
5 35 추가적인 제약 조건은 없다.

예제 입력 1

4 3
1 1 2 0
2 0 1 0
3 0 1 0
4 0 0 1

예제 출력 1

2

예제 입력 2

4 2
1 3 0 0
3 0 0 2
4 0 2 0
2 0 2 0

예제 출력 2

2

풀이

import sys

input = sys.stdin.readline
n, k = map(int, input().split())
medals = []

for i in range(n):
    medals.append(list(map(int, input().split())))
medals.sort(key=lambda x : (-x[1], -x[2], -x[3]))

for j in range(n):
    if medals[j][0] == k:
        index = j

for l in range(n):
    if medals[index][1:] == medals[l][1:]:
        print(l+1)
        break
728x90
반응형

+ Recent posts