728x90

BOJ 11365 !밀비 급일

문제

당신은 길을 가다가 이상한 쪽지를 발견했다. 

그 쪽지에는 암호가 적혀 있었는데, 똑똑한 당신은 암호가 뒤집으면 해독된다는 것을 발견했다.

이 암호를 해독하는 프로그램을 작성하시오.

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

입력

한 줄에 하나의 암호가 주어진다. 암호의 길이는 500을 넘지 않는다.

마지막 줄에는 "END"가 주어진다. (END는 해독하지 않는다.)

출력

각 암호가 해독된 것을 한 줄에 하나씩 출력한다.

예제 입력 1

!edoc doog a tahW
noitacitsufbo
erafraw enirambus detcirtsernu yraurbeF fo tsrif eht no nigeb ot dnetni eW
lla sees rodroM fo drol eht ,ssertrof sih nihtiw delaecnoC
END

예제 출력 1

What a good code!
obfustication
We intend to begin on the first of February unrestricted submarine warfare
Concealed within his fortress, the lord of Mordor sees all

풀이

import sys

input = sys.stdin.readline

while True:
    s = input().rstrip()
    if s == 'END':
        break
        
    print(s[::-1])
728x90
728x90

BOJ 2745 진법 변환

문제

B진법 수 N이 주어진다. 

이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 

이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

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

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

출력

첫째 줄에 B진법 수 N을 10진법으로 출력한다.

예제 입력 1

ZZZZZ 36

예제 출력 1

60466175

풀이

n, b = input().split()

print(int(n, int(b)))
728x90
728x90

BOJ 1357 뒤집힌 덧셈

문제

어떤 수 X가 주어졌을 때, X의 모든 자리수가 역순이 된 수를 얻을 수 있다.

Rev(X)를 X의 모든 자리수를 역순으로 만드는 함수라고 하자. 

예를 들어, X=123일 때, Rev(X) = 321이다. 그리고, X=100일 때, Rev(X) = 1이다.

두 양의 정수 X와 Y가 주어졌을 때, Rev(Rev(X) + Rev(Y))를 구하는 프로그램을 작성하시오

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

입력

첫째 줄에 수 X와 Y가 주어진다. 

X와 Y는 1,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 문제의 정답을 출력한다.

예제 입력 1

123 100

예제 출력 1

223

예제 입력 2

111 111

예제 출력 2

222

예제 입력 3

5 5

예제 출력 3

1

예제 입력 4

1000 1

예제 출력 4

2

예제 입력 5

456 789

예제 출력 5

1461

풀이

x, y = map(str, input().split())
x = int(x[::-1]) 
y = int(y[::-1]) 
res = str(x + y)

print(int(res[::-1]))
728x90
728x90

BOJ 1159 농구 경기

문제

상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 

처음에 그는 농구 경기를 좋아하는 사람이었다. 

농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작했다.

상근이도 농구장을 청소하면서 감독이 되기 위해 가져야할 능력을 공부해나갔다.

서당개 3년이면 풍월을 읊듯이 상근이는 점점 감독으로 한 걸음 다가가고 있었다. 

어느 날 그에게 지방의 한 프로농구팀을 감독할 기회가 생기게 되었다. 

그는 엄청난 지도력을 보여주며 프로 리그에서 우승을 했고, 이제 국가대표팀의 감독이 되었다.

내일은 일본과 국가대표 친선 경기가 있는 날이다. 

상근이는 내일 경기에 나설 선발 명단을 작성해야 한다.

국가대표팀의 감독이 된 이후에 상근이는 매우 게을러졌다. 

그는 선수의 이름을 기억하지 못하고, 각 선수의 능력도 알지 못한다. 

따라서, 누가 선발인지 기억하기 쉽게 하기 위해 성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 

만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다.

상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다.

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

입력

첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 

다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다)

출력

상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. 

PREDAJA는 크로아티아어로 항복을 의미한다. 

선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력한다.

예제 입력 1

18
babic
keksic
boric
bukic
sarmic
balic
kruzic
hrenovkic
beslic
boksic
krafnic
pecivic
klavirkovic
kukumaric
sunkic
kolacic
kovacic
prijestolonasljednikovi

예제 출력 1

bk

예제 입력 2

6
michael
jordan
lebron
james
kobe
bryant

예제 출력 2

PREDAJA

풀이

n = int(input())
arr = []

for _ in range(n):
    f = input()
    arr.append(f[0])

first_name = set(arr)
res = []

for i in first_name:
    if arr.count(i) >= 5:
        res.append(i)

if len(res) > 0:
    print(''.join(sorted(res)))
else:
    print("PREDAJA")
728x90
728x90

BOJ 2754 학점계산

문제

어떤 사람의 C언어 성적이 주어졌을 때, 평점은 몇 점인지 출력하는 프로그램을 작성하시오.

A+: 4.3, A0: 4.0, A-: 3.7

B+: 3.3, B0: 3.0, B-: 2.7

C+: 2.3, C0: 2.0, C-: 1.7

D+: 1.3, D0: 1.0, D-: 0.7

F: 0.0

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

입력

첫째 줄에 C언어 성적이 주어진다. 

성적은 문제에서 설명한 13가지 중 하나이다.

출력

첫째 줄에 C언어 평점을 출력한다.

예제 입력 1

A0

예제 출력 1

4.0

풀이

socre = {'A+':'4.3', 'A0':'4.0', 'A-':'3.7',
       'B+':'3.3', 'B0':'3.0', 'B-':'2.7',
       'C+':'2.3', 'C0':'2.0', 'C-':'1.7',
       'D+':'1.3', 'D0':'1.0', 'D-':'0.7',
       'F':'0.0'}

record = input()
print(socre[record])
728x90
728x90

BOJ 2935 소음

문제

수업 시간에 떠드는 두 학생이 있다. 

두 학생은 수업에 집중하는 대신에 글로벌 경제 위기에 대해서 토론하고 있었다. 

토론이 점점 과열되면서 두 학생은 목소리를 높였고, 결국 선생님은 크게 분노하였다.

이렇게 학생들이 수업 시간에 떠드는 문제는 어떻게 해결해야 할까?

얼마전에 초등학교 선생님으로 취직한 상근이는 이 문제를 수학 문제로 해결한다. 

학생들을 진정시키기 위해 칠판에 수학 문제를 써주고, 아이들에게 조용히 이 문제를 풀게 한다.

학생들이 문제를 금방 풀고 다시 떠드는 것을 방지하기 위해서, 숫자를 매우 크게 한다.

아직 초등학교이기 때문에, 학생들은 덧셈과 곱셈만 배웠다.

또, 아직 10의 제곱꼴을 제외한 다른 수는 학교에서 배우지 않았기 때문에, 선생님이 써주는 수는 모두 10의 제곱 형태이다.

쉬는 시간까지 문제를 푸는 것을 막기 위해서, 선생님이 써주는 숫자는 최대 100자리이다.

칠판에 쓰여 있는 문제가 주어졌을 때, 결과를 구하는 프로그램을 작성하시오.

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

입력

첫째 줄에 양의 정수 A가 주어진다.

둘째 줄에 연산자 + 또는 *가 주어진다.

셋째 줄에 양의 정수 B가 주어진다.

A와 B는 모두 10의 제곱 형태이고, 길이는 최대 100자리이다.

출력

첫째 줄에 결과를 출력한다.

결과는 A+B 또는 A*B이며, 입력에서 주어지는 연산자에 의해 결정된다.

예제 입력 1

1000
*
100

예제 출력 1

100000

예제 입력 2

10000
+
10

예제 출력 2

10010

예제 입력 3

10
+
1000

예제 출력 3

1010

예제 입력 4

1
*
1000

예제 출력 4

1000

풀이

a = int(input())
b = input()
c = int(input())

if (b == '*'):
    print(a*c)
else: 
    print(a+c)
728x90
728x90

BOJ 4999 아!

문제

재환이는 저스틴 비버 콘서트에서 소리를 너무 많이 질러서 인후염에 걸렸다.

의사는 재환이에게 "aaah"를 말해보라고 시켰다. 

안타깝게도 재환이는 의사가 원하는만큼 소리를 길게 낼 수 없는 경우가 있었다.

각각의 의사는 재환이에게 특정한 길이의 "aah"를 말해보라고 요청한다. 

어떤 의사는 "aaaaaah"를 요구하기도 하고, "h"만 요구하는 의사도 있다.

모든 의사는 자신이 원하는 길이의 "aah"를 듣지 못하면 진단을 내릴 수 없다.

따라서, 재환이는 집에서 자신이 얼마나 길게 "aah"를 낼 수 있는지 알아냈고, 

자기가 소리낼 수 있는 길이의 "aah"를 요구하는 의사를 방문하려고 한다.

재환이가 낼 수 있는 "aah"의 길이와 의사가 요구하는 길이가 주어진다. 

이때, 그 병원에 가야하는지 말아야하는지를 알아내는 프로그램을 작성하시오.

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

입력

입력은 두 줄로 이루어져 있다.

첫째 줄은 재환이가 가장 길게 낼 수 있는 "aaah"이다.

둘째 줄은 의사가 듣기를 원하는 "aah"이다. 두 문자열은 모두 a와 h로만 이루어져 있다.

a의 개수는 0보다 크거나 같고, 999보다 작거나 같으며, 항상 h는 마지막에 하나만 주어진다.

출력

재환이가 그 병원에 가야하면 "go"를, 아니면 "no"를 출력한다.

예제 입력 1

aaah
aaaaah

예제 출력 1

no

예제 입력 2

aaah
ah

예제 출력 2

go

풀이

a = input()
b = input()

if len(a) < len(b):
    print('no')
else:
    print('go')
728x90
728x90

BOJ 10798 세로읽기

문제

아직 글을 모르는 영석이가 벽에 걸린 칠판에 자석이 붙어있는 글자들을 붙이는 장난감을 가지고 놀고 있다. 

이 장난감에 있는 글자들은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’이다. 

영석이는 칠판에 글자들을 수평으로 일렬로 붙여서 단어를 만든다. 

다시 그 아래쪽에 글자들을 붙여서 또 다른 단어를 만든다. 이런 식으로 다섯 개의 단어를 만든다. 

아래 그림 1은 영석이가 칠판에 붙여 만든 단어들의 예이다.
A A B C D D
a f z z 
0 9 1 2 1
a 8 E W g 6
P 5 h 3 k x

<그림 1>

한 줄의 단어는 글자들을 빈칸 없이 연속으로 나열해서 최대 15개의 글자들로 이루어진다.

또한 만들어진 다섯 개의 단어들의 글자 개수는 서로 다를 수 있다. 

심심해진 영석이는 칠판에 만들어진 다섯 개의 단어를 세로로 읽으려 한다. 

세로로 읽을 때, 각 단어의 첫 번째 글자들을 위에서 아래로 세로로 읽는다. 

다음에 두 번째 글자들을 세로로 읽는다. 

이런 식으로 왼쪽에서 오른쪽으로 한 자리씩 이동 하면서 동일한 자리의 글자들을 세로로 읽어 나간다.

위의 그림 1의 다섯 번째 자리를 보면 두 번째 줄의 다섯 번째 자리의 글자는 없다. 

이런 경우처럼 세로로 읽을 때 해당 자리의 글자가 없으면, 읽지 않고 그 다음 글자를 계속 읽는다.

그림 1의 다섯 번째 자리를 세로로 읽으면 D1gk로 읽는다. 

그림 1에서 영석이가 세로로 읽은 순서대로 글자들을 공백 없이 출력하면 다음과 같다:

Aa0aPAf985Bz1EhCz2W3D1gkD6x

칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오.

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

입력

총 다섯줄의 입력이 주어진다. 

각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 

주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’ 중 하나이다. 

각 줄의 시작과 마지막에 빈칸은 없다.

출력

영석이가 세로로 읽은 순서대로 글자들을 출력한다. 

이때, 글자들을 공백 없이 연속해서 출력한다.

예제 입력 1

ABCDE
abcde
01234
FGHIJ
fghij

예제 출력 1

Aa0FfBb1GgCc2HhDd3IiEe4Jj

예제 입력 2

AABCDD
afzz
09121
a8EWg6
P5h3kx

예제 출력 2

Aa0aPAf985Bz1EhCz2W3D1gkD6x

풀이

words = []
length = []

for _ in range(5):
    word = input()
    words.append(word)
    length.append(len(word))

res = ''

for i in range(max(length)):
    for j in range(5):
        if i < length[j]:
            res += words[j][i]

print(res)
728x90

+ Recent posts