https://www.acmicpc.net/problem/15312
아스키 코드를 활용하여 입력 받은 알파벳의 획수를 알아낸다. 이후 while
반복문 내에서 남은 숫자가 2가 될 때까지 인접한 수를 더해주는 간단한 문제다.
첫 시도에는 데이터의 자료형을 반복적으로 변경하여 PyPy
를 사용해야만 통과할 수 있었다. 그래서 Int
자료형으로만 값을 처리하기 위해 배열을 사용하였고, 결국 Python
으로도 통과할 수 있었다.
hint
, a
, b
에 저장하고, 빈 배열 arr
를 생성한다.arr
에 알파벳의 획수를 하나씩 삽입한다.temp
를 하나 더 만들어 주고, arr
의 길이가 2가 될 때까지 인접한 값들의 합의 1의 자리를 temp
에 삽입한다.arr
의 값을 temp
로 초기화 시켜주고, temp
는 비워준다.arr
의 길이가 2가 되면 반복문이 종료되고, 요소를 공백 없이 출력한다.hint = [3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1]
a = input()
b = input()
arr = []
# 알파벳의 아스키 코드에서 65를 빼면 hint에서 해당 알파벳의 인덱스를 구할 수 있다. 이를 arr 배열에 삽입한다.
for i in range(len(a)):
arr.append(hint[ord(a[i]) - 65])
arr.append(hint[ord(b[i]) - 65])
temp = []
# arr의 길이가 2가 될 때까지 반복
while len(arr) != 2:
for idx in range(1, len(arr)):
# 인접한 값들의 합을 10으로 나누었을 때, 그 나머지는 1의 자리와 같다.
temp.append((arr[idx] + arr[idx-1]) % 10)
arr = temp
temp = []
print(f"{arr[0]}{arr[-1]}")
--
아래의 알고리즘은 처음에 시도했던, PyPy
로만 통과한 코드이다. 참고만 할 수 있도록 하자.
hint = [3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1]
a = input()
b = input()
res = ""
# 아스키 코드를 활용하여 알파벳의 획수를 구하고, 이를 문자열로 바꾸어 더해준다.
for i in range(len(a)):
res += str(hint[ord(a[i]) - 65]) + str(hint[ord(b[i]) - 65])
ans = ""
# res의 인접한 값들을 int 자료형으로 바꾸어 더한 뒤 다시 문자열로 바꿔서 1의 자리를 ans에 더해준다.
# 이를 res의 길이가 2가 될 때까지 반복
while len(res) != 2:
for i in range(1, len(res)):
ans += str((int(res[i]) + int(res[i-1])))[-1]
res = ans
ans = ""
print("%2s" % res)