본문 바로가기

CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 1431 시리얼 번호

음 .. 이 문제는 뭐랄까..?

이 자체의 문제가 의미있게 다가오지는 않고, 여기서 활용되는 정렬 스킬들을 응용해서 더 고차원의 문제를 푸는 데 이용할 수 있을 것 같다는 생각이 들었다.

 

import sys
input = sys.stdin.readline

n = int(input())

serial = []

for i in range(n):
  s = input().strip()
  sum = 0
  for i in list(s):
    if 48 <= ord(i) <= 57:
      sum += int(i)
  serial.append([s,sum])

serial.sort(key = lambda x:(len(x[0]), x[1], x[0]))


for s in serial:
  print(s[0])

 

되짚을만한건,

1. 숫자와 글자 구분을 ord 이용해 ASCII값으로 바꿔 범위 안에 있는지를 확인했다.

풀고 나서 생각하니 파이썬 메서드가 있었던 것 같다

 

isdigit 이었던 것 같다고 생각하니 isnumeric이 먼저 관련 검색어로 떠서 들어갔다. 음? 같은 동작인데 뭐가 다르지 하고 더 검색해봤다. 아하!

 

 While the isidigit method checks whether the string contains only digits,

the isnumeric method checks whether all the characters are numeric.

 

분명한 차이가 있었는데 모르고 지나칠 뻔.. 다행이다.

 

2. sort할 때 key값을 여러 개 주는 것! ( ) 를 빼먹지 말자! 처음에 빼 놓고 해서 인자 너무 많다고 경고 떠서 왜인가 했는데 이런 실수였다. 마음 급해지지 말도록 하자.