코테 공부/그 외 사이트

[Python] 1.구름 숫자

prefer_all 2022. 11. 28. 21:17

출처: 구름 알고리즘 먼데이 챌린지 8주차

문제

구름 나라는 기존의 숫자 대신에 알파벳 소문자를 사용하여 숫자를 표기하기로 한다. 이를 구름 숫자라고 부른다. 구름 숫자는 아래의 표를 참고하여 작성할 수 있다.

 

구름 숫자는 효율성을 위해서 특별한 규칙을 가지고 있다. 여러 개의 구름 숫자를 이어서 작성하다가, 중복되는 알파벳이 있으면 합친다.

구름 숫자로 작성한 문자열이 주어질 때, 이를 기존의 숫자로 바꿔서 출력하는 프로그램을 작성하고자 한다. 이때 여러가지 경우의 수가 나온다면, 그 중 길이가 최대인 수를 출력하시오.


입력

첫째 줄에서는 문자열의 길이 N(1<=N<=1000)이 주어진다.
둘째 줄에서는 구름 숫자로 표기한 숫자가 길이 만큼 입력된다. 문자열은 구름 숫자에 포함된 알파벳 소문자를 제외하고 주어지지 않는다.

출력

입력된 구름 숫자를 기존 숫자로 변환하여 출력하시오.

 

예제 입력 예제 출력 
4
qwer
147
10
sdweasweas
54242

풀이

ze가 0번째 인덱스인데 10번째로 해서 시간을 빼앗겼다. 문제 잘 좀 읽자!

import sys
input = sys.stdin.readline
arr = ['ze', 'qw', 'as', 'zx', 'we', 'sd', 'xc', 'er', 'df', 'cv']
N = int(input())
num = list(input())
#print(N, num)

answer = ''
for i in range(len(num)-1):
	tmp = num[i]+ num[i+1]
	if tmp in arr:
		answer += str(arr.index(tmp))

print(answer)

일부 테케가 틀렸던 이유는 print(int(answer))을 했기 때문이다.

 

📝

LIST.index(ITEM)      LIST라는 배열에서 ITEM이 몇번째 인덱스에 있는가 (여러 개면 가장 앞의 인덱스 반환)


다른 풀이

dictionary를 활용한 풀이

'''
구름 숫자: 알파벳 소문자를 사용해 숫자 표기
중복되는 알파벳이 있으면 합친다
구름 숫자를 보고 기존 숫자로 바꿔라(여러 개로 가능하면 길이가 가장 긴 값으로)
qwer -> qw we er 
'''
import sys
input = sys.stdin.readline

arr =  {
    'qw': '1',
    'as': '2',
    'zx': '3',
    'we': '4',
    'sd': '5',
    'xc': '6',
    'er': '7',
    'df': '8',
    'cv': '9',
    'ze': '0'
}
N = int(input())
num = list(input())
#print(N, num)

answer = ''
for i in range(len(num)-1):
	tmp = num[i]+ num[i+1]
	if tmp in arr:
		answer += arr[tmp]

print(answer)

 

📝

string은 slicing이 되니까 list로 변환해줄 필요 없음

num = input()

dict key 접근해도 됨

if tmp in arr.keys():