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

BOJ 2744 대소문자 바꾸기

문제

영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오.

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

입력

첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 

단어의 길이는 최대 100이다.

출력

첫째 줄에 입력으로 주어진 단어에서 대문자는 소문자로, 소문자는 대문자로 바꾼 단어를 출력한다.

예제 입력 1

WrongAnswer

예제 출력 1

wRONGaNSWER

풀이

s = input()

print(s.swapcase())

 

728x90
728x90

BOJ 9093 단어 뒤집기

문제

문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오.

단, 단어의 순서는 바꿀 수 없다.

단어는 영어 알파벳으로만 이루어져 있다.

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

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 

각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 

단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 

단어와 단어 사이에는 공백이 하나 있다.

출력

각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

예제 입력 1

2
I am happy today
We want to win the first prize

예제 출력 1

I ma yppah yadot
eW tnaw ot niw eht tsrif ezirp

풀이

import sys

input =  sys.stdin.readline
n = int(input())
 
for _ in range(n):
  words = input().rstrip().split()
 
  for i in words:
    print(i[::-1], end=' ')

  print()
728x90
728x90

BOJ 2902 KMP는 왜 KMP일까?

문제

KMP 알고리즘이 KMP인 이유는 이를 만든 사람의 성이 Knuth, Morris, Prett이기 때문이다.

이렇게 알고리즘에는 발견한 사람의 성을 따서 이름을 붙이는 경우가 많다.

또 다른 예로, 유명한 비대칭 암호화 알고리즘 RSA는 이를 만든 사람의 이름이 Rivest, Shamir, Adleman이다.

사람들은 이렇게 사람 성이 들어간 알고리즘을 두 가지 형태로 부른다.

첫 번째는 성을 모두 쓰고, 이를 하이픈(-)으로 이어 붙인 것이다. 예를 들면, Knuth-Morris-Pratt이다.이것을 긴 형태라고 부른다.
두 번째로 짧은 형태는 만든 사람의 성의 첫 글자만 따서 부르는 것이다. 예를 들면, KMP이다.

동혁이는 매일매일 자신이 한 일을 모두 메모장에 적어놓는다. 

잠을 자기 전에, 오늘 하루 무엇을 했는지 되새겨 보는 것으로 하루를 마감한다.

하루는 이 메모를 보던 중, 지금까지 긴 형태와 짧은 형태를 섞어서 적어 놓은 것을 발견했다.

이렇게 긴 형태로 하루 일을 기록하다가는 메모장 가격이 부담되어 파산될 것이 뻔하기 때문에, 앞으로는 짧은 형태로 기록하려고 한다.

긴 형태의 알고리즘 이름이 주어졌을 때, 이를 짧은 형태로 바꾸어 출력하는 프로그램을 작성하시오.

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

입력

입력은 한 줄로 이루어져 있고, 최대 100글자의 영어 알파벳 대문자, 소문자, 그리고 하이픈 ('-', 아스키코드 45)로만 이루어져 있다.

첫 번째 글자는 항상 대문자이다. 

그리고, 하이픈 뒤에는 반드시 대문자이다. 그 외의 모든 문자는 모두 소문자이다.

출력

첫 줄에 짧은 형태 이름을 출력한다.

예제 입력 1

Knuth-Morris-Pratt

예제 출력 1

KMP

예제 입력 2

Mirko-Slavko

예제 출력 2

MS

예제 입력 3

Pasko-Patak

예제 출력 3

PP

풀이

arr = list(input().split('-'))

for i in arr:
    print(i[0], end = '')
728x90

+ Recent posts