[#1431] 시리얼 번호
문제
#1431 시리얼 번호
Silver3
적용 알고리즘: 정렬 알고리즘
풀이 방법
코드 흐름
코드
[2023-07-30] 아래는 미완성 코드…
n = int(input())
serial = []
for i in range(n):
serial.append(input())
idx = 0
change = 0
serial.sort(key=len)
while (len(serial) > 0):
temp = []
temp.append(serial[idx])
# 길이가 다르면 temp안에 있던 것 처리
if (len(serial[idx]) != len(serial[idx + 1])):
num_dic = {}
for sri in temp:
nums = 0
for word in sri:
if (48 <= ord(word) <= 57):
nums += int(word)
########################################################
# 딕셔너리에 넣는 과정이 잘못된거같긴하다. 왜 튜플로?
if nums in num_dic:
num_dic[nums].append(sri)
else:
num_dic[nums] = list(sri)
# 딕셔너리의 각 key에 대해서(숫자의 합이 동일한 serial번호에 대해서) 딕셔너리 순으로 정렬
num_dic = sorted(num_dic.items()) # 키 값으로 정렬
print(num_dic)
########################################################
# 딕셔너리 내부 정렬?
# key 값으로 정렬 하고 그 뒤에 각 key마다 정렬을 수행해야 함
for k in range(len(num_dic)):
print(num_dic[k])
num_dic[k].index(1).sort()
########################################################
# 딕셔너리에 저장된 순서대로 출력
for k in range(len(num_dic)):
for j in num_dic.values():
print(j)
del serial[0:idx]
idx = 0
idx += 1
체감 난이도: 4.5/5
[2023-07-30] 딕셔너리 구현 미완성
딕셔너리에 대한 공부를 좀 더 해야할거같다… 생각보다 실버3인데 머릿속에서 구성이 깔끔하게 그려지지 않아서 당황했다. 뭔가 다른 더 간단한 문제 풀이 방법이 있을 것 같은데 아직은 내가 생각하는 방법이 최선인것 같다.
- 시리얼 번호를 각각의 시리얼 번호의 길이 순으로 정렬한다.
- 길이가 같은 시리얼 번호에 대해서 처리하기 위해 맨 앞 시리얼 번호부터 임시 리스트 temp에 넣는다.
- temp에 들어가있는 시리얼 번호에 대해서, 아스키 코드를 이용하여 만일 해당 문자가 숫자라면 (47~57) 이를 다 더하고, 해당 시리얼 번호의 숫자의 합을 key값으로 하여 딕셔너리에 저장한다. 이를 길이가 동일한 시리얼 번호에 대해서(temp안의 시리얼 번호) 수행한다.
- 딕셔너리를 key값을 기준으로 오름차순으로 정렬한다.
- 각 key의 values에 대해서 (내부 리스트에 대해) 오름차순으로 정렬한다.
- 딕셔너리의 값을 차례대로 출력한다.
- 그 다음 동일한 길이의 시리얼 번호를 가진 시리얼 번호에 대해서 2~6의 과정을 반복한다.
진짜 내가 봤을 땐 너무 완벽한데 왜 안되는거지? 사실 딕셔너리의 내부 정렬에서 자꾸 에러가 떠서… 내부 리스트 정렬에 대해서 더 찾아봐야겠다. 아니 이게 왜 난 분명 딕셔너리로 했는데 튜플로 들어가지? 그거만 해결되면 문제는 해결될거 같긴하다…