2018카카오 블라인드 채용 코딩테스트에 출제되었던 문제이다.
위 조건을 만족하도록 구현만 하면 되는 문제인데 입력의 첫번째 문자와 일치하는 문자열 중 가장 길이가 긴 문자열을 찾는 것에 좀 시간이 오래걸렸다.
def solution(msg):
mark = {"A": 1, "B": 2, "C": 3, "D": 4, "E": 5, "F": 6, "G": 7, "H": 8, "I": 9, "J": 10, "K": 11, "L": 12, "M": 13,
"N": 14, "O": 15, "P": 16, "Q": 17, "R": 18, "S": 19, "T": 20, "U": 21, "V": 22, "W": 23, "X": 24, "Y": 25,
"Z": 26}
answer = list()
w, c = 0, 0
while True:
if c == len(msg):
answer.append(mark[msg[w:c]])
break
elif msg[w:c+1] in mark:
c += 1
else:
answer.append(mark[msg[w:c]])
mark[msg[w:c+1]] = len(mark)+1
w = c
return answer
mark라는 딕셔너리에 msg[w:c+1]이 존재하지 않을 때까지 c를 1씩 늘려가다가 존재하지 않으면 새로 딕셔너리에 추가 해주는 방식으로 해결했는데 mark를 초기화 하는 과정에서 나는 파이썬에서는 c언어 처럼 안쓸려고 하다보니까 아스키 코드를 파이썬에서도 쓸 생각을 못하고 있었는데
mark = dict()
for i in range(0,26):
mark[chr(65+i)] = i+1
이런식으로 간단히 초기화 해줄 수 있었다.
프로그래머스 레벨2를 페이지에 있는 순서대로 풀고 있는데 카카오에 출제되었던 문제들은 문제 자체는 풀 수 있을 것처럼 생각이 드는데 막상 코드를 짜면 어디선가 로직이 정확하지 않아서 풀기가 어렵다. 더욱 세심하게 로직을 구성하고 짜는 노력을 많이 해야겠다.