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
728x90

BOJ 10824 네 수

문제

네 자연수 A, B, C, D가 주어진다. 

이때, A와 B를 붙인 수와 C와 D를 붙인 수의 합을 구하는 프로그램을 작성하시오.

두 수 A와 B를 합치는 것은 A의 뒤에 B를 붙이는 것을 의미한다. 

즉, 20과 30을 붙이면 2030이 된다.

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

입력

첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000)

출력 

A와 B를 붙인 수와 C와 D를 붙인 수의 합을 출력한다.

예제 입력 1

10 20 30 40

예제 출력 1

4060

풀이

import sys 

input = sys.stdin.readline
a, b, c, d = map(str, input().strip().split())
ab = a + b
cd = c + d
res = int(ab) + int(cd)

print(res)
728x90
728x90

BOJ 7567 그릇

문제

그릇을 바닥에 놓았을 때 그 높이는 10cm 이다. 

그런데 두 개의 그릇을 같은 방향으로 포개면 그 높이는 5cm만 증가된다.

만일 그릇이 서로 반대방향으로 쌓이면 높이는 그릇만큼, 즉 10cm 늘어난다. 

그릇을 괄호 기호로 나타내어 설명해보자.

편의상 그릇이 쌓여지는 방향은 왼쪽에서 오른쪽이라고 가정한다.

그림에서 ‘(’은 그릇이 바닥에 바로 놓인 상태를 나타내며, ‘)’은 그릇이 거꾸로 놓인 상태를 나타낸다.

만일 그릇이 포개진 모양이 ((((와 같다면 전체의 높이는 25cm가 된다.

왜냐하면 처음 바닥에 있는 그릇의 높이가 10cm이고 이후 같은 방향으로 3개의 그릇이 포개져 있으므로 늘어난 높이는 5+5+5=15 이기 때문이다. 

()()와 같은 경우라면 그 높이는 10*4=40cm가 된다.

여러분은 입력에 주어진 모양대로 그릇을 쌓을 때 최종의 전체 그릇 높이를 계산해서 출력해야 한다.

즉 처음 입력으로 주어진 각 그릇의 방향은 바꿀 수 없다. 

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

입력

첫 줄에는 괄호문자로만 이루어진 문자열이 주어진다.

입력 문자열에서 열린 괄호 ‘(’은 바로 놓인 그릇, 닫힌 괄호 ‘)’은 거꾸로 놓인 그릇을 나타난다. 

문자열의 길이는 3이상 50 이하이다.

출력

여러분은 그릇 방향이 괄호 문자로 표시된 문자열을 읽어서 그 최종의 높이를 정수로 출력해야 한다.

예제 입력 1

((((

예제 출력 1

25

예제 입력 2

()()()))(

예제 출력 2

80

풀이

bowl = list(input())
res = 10

n=len(bowl)

for i in range(len(bowl)):
    if bowl[i] == bowl[i+1]:
        res += 5
    else :
        res += 10 

print(res)
728x90
728x90

BOJ 2진수 8진수

문제

2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.

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

입력

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.

예제 입력 1

11001100

예제 출력 1

314

풀이

a = int(input(), 2)
b = oct(a)[2:]

print(b)
728x90
728x90

BOJ 1212 8진수 2진수

문제

8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.

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

입력

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

출력

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 

수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.

예제 입력 1

314

예제 출력 1

11001100

풀이

a = int(input(), 8)
b = bin(a)[2:]

print(b)
728x90
728x90

BOJ 11655 ROT13

문제

ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다.

예를 들어, "Baekjoon Online Judge"를 ROT13으로 암호화하면 "Onrxwbba Bayvar Whqtr"가 된다.

ROT13으로 암호화한 내용을 원래 내용으로 바꾸려면 암호화한 문자열을 다시 ROT13하면 된다. 

앞에서 암호화한 문자열 "Onrxwbba Bayvar Whqtr"에 다시 ROT13을 적용하면 "Baekjoon Online Judge"가 된다.

ROT13은 알파벳 대문자와 소문자에만 적용할 수 있다. 

알파벳이 아닌 글자는 원래 글자 그대로 남아 있어야 한다. 

예를 들어, "One is 1"을 ROT13으로 암호화하면 "Bar vf 1"이 된다.

문자열이 주어졌을 때, "ROT13"으로 암호화한 다음 출력하는 프로그램을 작성하시오.

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

입력

첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다.

S의 길이는 100을 넘지 않는다.

출력

첫째 줄에 S를 ROT13으로 암호화한 내용을 출력한다.

예제 입력 1

Baekjoon Online Judge

예제 출력 1

Onrxwbba Bayvar Whqtr

예제 입력 2

One is 1

예제 출력 2

Bar vf 1

풀이

s = input()
res = ''

for i in s:
    if i.isupper():
        if (65 <= ord(i) <= 77):
            res += chr(ord(i) + 13) 
        else:
            res += chr(ord(i) - 13)  
    elif i.islower():
        if (97 <= ord(i) <= 109):
            res += chr(ord(i) + 13) 
        else:
            res += chr(ord(i) - 13) 
    else:
        res += i
        
print(res)
728x90

+ Recent posts