https://www.acmicpc.net/problem/17269
import copy
dic = {'A':3,'B':2,'C':1,'D':2,'E':4,'F':3,'G':1,'H':3,'I':1,'J':1,'K':3,'L':1,'M':3,'N':2,'O':1,'P':2,'Q':2,'R':2,'S':1,'T':2,'U':1,'V':1,'W':1,'X':2,'Y':2,'Z':1}
N, M = map(int, input().split())
A, B = input().split()
min_len = min(N,M)
new = []
for i in range(min_len):
new += A[i] + B[i]
if N > M:
new += A[min_len:]
elif N < M:
new += B[min_len:]
new_num = []
for j in new:
new_num.append(dic[j])
while len(new_num) > 2:
temp = []
for k in range(1, len(new_num)):
temp_num = new_num[k-1] + new_num[k]
if temp_num >= 10:
temp_num -= 10
temp.append(temp_num)
new_num = copy.deepcopy(temp)
print("{}%".format(new_num[0]*10 + new_num[1]))
N, M = map(int, input().split())
A, B = input(). split()
alp = [3,2,1,2,4,3,1,2,1,1,3,1,3,2,1,2,2,2,1,2,1,1,1,2,2,1]
AB = ''
min_len = min(N, M)
for i in range(min_len):
AB += A[i] + B[i]
AB += A[min_len:] + B[min_len:]
lst = [alp[ord(i)-ord('A')] for i in AB]
for i in range(N+M-2):
for j in range(N+M-i-1):
lst[j] += lst[j+1]
print("{}%".format(lst[0] %10*10 + lst[1] %10))
마지막 for문에서 lst의 범위를 줄여가며 앞의 값에 뒤의 값을 더한다. lst[0] += lst[1]이 끝일때까지
lst[0]과 lst[1]에 앞의 값들을 더한걸 넣어줬으니 출력한다.
ord함수는 아스키코드를 숫자로 표현하는 함수
A는 32부터 시작~
alp[ord('C')-ord('A')] = alp[2] 이므로 C의 획수를 찾을 수 있다.
'알고리즘 > 백준 (Pyhthon)' 카테고리의 다른 글
[알고리즘] 백준 16165 걸그룹 마스터 준석이 / python (0) | 2020.02.26 |
---|---|
[알고리즘] 백준 17389 보너스점수 / python (0) | 2020.02.25 |
[알고리즘] 백준 9251 LCS / python (0) | 2020.02.12 |
[알고리즘] 백준 11053 가장 긴 증가하는 부분수열 / python (0) | 2020.02.11 |
[알고리즘] 백준 12865 평범한 배낭 / python (0) | 2020.02.11 |