728x90
반응형

입력이 대문자인 경우 shift를 추가로 눌러줘야 되므로 대문자의 개수(cnt_other)를 세주고, 왼손과 오른손 영역에 속하는 알파벳의 개수(cnt_left, cnt_right)도 각각 세준다.

그 후 cnt_other를 cnt_left와 cnt_right의 차이가 최대한 줄어들도록 골고루 나눠주면 된다. 

EX) 입력이 Hello World인 경우

cnt_other = 3, cnt_left = 4, cnt_right = 6

-> cnt_left = 4 + 3 = 7, cnt_right = 6

S = input() 
li_left = 'qwertyasdfgzxcvb' 
li_right = 'uiophjklnm' 
cnt_left, cnt_right, cnt_other = 0, 0, 0 

for i in S: 
    if i.isupper(): 
        cnt_other += 1 
         
for i in S.lower(): 
    if i in li_right: 
        cnt_right += 1 
    elif i in li_left: 
        cnt_left += 1 
    else: 
        cnt_other += 1 

while cnt_other != 0: 
    if cnt_left <= cnt_right: 
        cnt_left += 1 
    else: 
        cnt_right += 1 
    cnt_other -= 1 
     
print(cnt_left, cnt_right)
728x90
반응형
728x90
반응형

1, 2회 코드 페스티벌의 상금이 담겨있는 리스트를 직접 생성하는 방식으로 무식하게 풀었다.

li1 = [5000000] + [3000000]*2 + [2000000]*3 + [500000]*4 + [300000]*5 + [100000]*6 + [0]*79
li2 = [5120000] + [2560000]*2 + [1280000]*4 + [640000]*8 + [320000]*16 + [0]*33
for _ in range(int(input())):
    n1, n2 = map(int, input().split())
    print(li1[n1-1] + li2[n2-1])

728x90
반응형
728x90
반응형

리스트의 합을 리턴해주는 함수를 만들어서 제출하면 되는 문제다.

def solve(a):
    return sum(a)

728x90
반응형
728x90
반응형

그냥 입력을 받으면 시간 초과가 뜨기 때문에

sys.stdin.readline()을 사용해 빠르게 입력을 받아야 한다.

import sys
for i in range(int(input())):
    a, b = map(int, sys.stdin.readline())
    print(a+b)

728x90
반응형
728x90
반응형

map과 list 함수를 사용해 입력을 한 자리 숫자들이 담겨 있는 리스트로 만들어주고 리스트의 합을 출력해주면 된다.

_ = int(input())
print(sum(list(map(int, input()))))

728x90
반응형
728x90
반응형

11718 그대로 출력하기와 해답이 같다.

while True:
    try:
        print(input())
    except EOFError:
        break

728x90
반응형
728x90
반응형

그냥 입력받고 출력해주면 런타임 에러가 뜬다. 이유는 솔직히 잘 모르겠다.

try를 사용하니 해결이 되었다.

while True:
    try:
        print(input())
    except EOFError:
        break

728x90
반응형
728x90
반응형

파이썬 내장 함수인 ord를 통해 문자의 아스키코드를 확인할 수 있다.

print(ord(input()))

728x90
반응형
728x90
반응형

11650 좌표 정렬하기와 해답이 같다. 

li = []
for _ in range(int(input())):
    li.append(list(map(int, input().split())))
li.sort(key=lambda x : x[1])
li.sort(key=lambda x : x[0])
for i in li:
    print(*i)

728x90
반응형
728x90
반응형

우선 입력(좌표)들을 2*N 형태의 리스트에 저장한다.

그 후 lambda를 사용해 y기준 오름차순 정렬 후 x기준 오름차순 정렬을 해주면 된다.

li = []
for _ in range(int(input())):
    li.append(list(map(int, input().split())))
li.sort(key=lambda x : x[1])
li.sort(key=lambda x : x[0])
for i in li:
    print(*i)

728x90
반응형
728x90
반응형

은근히 풀기 귀찮은 문자열 처리 문제다.

우선 공주의 모습을 n*n 형태의 리스트에 저장한다.

그 후 K가 2이면 li[i][::-1]을 통해 각 행들을 좌우반전시켜주고

K가 3이면 li[::-1]을 통해 상하반전시켜준다.

(출력해서 볼 때는 상하반전된 것처럼 보이지만 사실 리스트가 좌우반전된 상황이다)

마지막으로 각 행을 순서대로 출력해주면 된다.

n = int(input())
li = []
for i in range(n):
    li.append(input())
K = int(input())
if K == 2:
    for i in range(n):
        li[i] = li[i][::-1]
elif K == 3:
    li = li[::-1]
for i in range(n):
    print(li[i])

728x90
반응형
728x90
반응형

우선 입력을 리스트에 저장하고 오름차순 정렬해준다.

그 후 첫 번째 값부터 마지막 값까지 누적 값을 순서대로 더해주면 된다.

EX) 입력: 3, 1, 4, 3, 2

리스트로 만든 후 정렬 -> [1, 2, 3, 3, 4]

누적 값을 순서대로 더함 -> 1 + (1+2) + (1+2+3) + (1+2+3+3) + (1+2+3+3+4) = 1+3+6+9+13 = 32

답: 32

N = int(input())
li = sorted(list(map(int, input().split())))
ans = 0
for i in range(N):
    ans += sum(li[:i+1])
print(ans)
728x90
반응형
728x90
반응형

이항 계수 1 문제처럼 그냥 factorial 함수를 사용해서 풀어도 된다.

import math
n1, n2 = map(int, input().split())
ans = math.factorial(n1) // math.factorial(n1-n2) // math.factorial(n2) 
print(ans%10007)

알고리즘 분류가 다이나믹 프로그래밍인 것을 보아하니 파스칼의 삼각형을 사용해서 풀어보라는 것 같아서

구현해봤는데 위에 방법보다 훨씬 느리다. factorial 사용 56ms < 파스칼의 삼각형 424ms -> 거의 8배 차이

그냥 파스칼의 삼각형이라는 것이 무엇인지 정도만 알고 지나가면 될 문제 같다.

li = [[0 for i in range(1001)] for j in range(1001)]
li[0][0] = li[1][0] = li[1][1] = 1
for i in range(2, 1001):
    for j in range(i+1):
        if j == 0 or i == j:
            li[i][j] = 1
        else:
            li[i][j] = li[i-1][j-1] + li[i-1][j]
n1, n2 = map(int, input().split())
print(li[n1][n2] % 10007)

728x90
반응형
728x90
반응형

K보다 싼 동전 중에서 제일 큰 것부터 순서대로 꽉꽉 채운다는 느낌으로 풀면 된다.

EX) K = 4200, 입력: 1 5 10 50 100 500 1000 5000 10000 50000

ans = 0

1) 4200 - 1000*4 = 200 -> ans = 0 + 4 = 4

2) 200 - 100*2 = 0 -> ans = 4 + 2 = 6 -> 6 출력

N, K = map(int, input().split())
li = sorted([int(input()) for _ in range(N)], reverse=True)
cnt = 0
for c in li:
    if c <= K:
        cnt += K//c
        K %= c
    if K == 0:
        break
print(cnt)
728x90
반응형
728x90
반응형

11021번 A+B - 7과 똑같이 format을 잘 사용해주자.

for i in range(int(input())):
    n1, n2 = map(int, input().split())
    print("Case #{0}: {1} + {2} = {3}".format(i+1, n1, n2, n1+n2))

728x90
반응형

+ Recent posts