백준 코딩 테스트 1181 - 파이썬 프로그래밍

2020. 12. 9. 22:56코딩/프로그래밍 기타

파이썬의 간결함을 느끼게 해준 첫 문제

사실 지금까지는 파이썬이 간결하다 하는데 남 얘기를 들은 느낌이었는데

이번 문제를 풀면서 체감을 한 것 같다.

사실 더 줄일 수 있는 부분이 있을 것 같은데

나는 C계열을 많이 써와서 그런지 쓸데없는 축약은 피하고싶다.

 

1181번 문제는 지문을 읽으면 3가지를 클리어해야한다고 생각했다.

1. 중복제거

2. 1번째 정렬조건

3. 2번째 정렬조건

 

1번은 귀찮게 중복처리할 필요없이 딕셔너리이나 set을 사용하면 쉽게 처리가능하다

여기서는 두개의 값이 있기 때문에 딕셔너리로 처리하였다.

 

2, 3번은 한번에 처리해주어야 한다

라이브러리를 쓰지 못하는 상황의 C++같았으면 끔찍하게 긴 코드가 되었겠지만

당연 파이썬에서는 여러 조건을 통한 정렬이 존재한다.

 

강력한 sorted()를 사용하면 key를 통해 다양한 처리가 가능하다.

key에는 함수형태가 들어가야 하기 때문에 lambda가 많이 사용되는 듯하다.

이건 이번에 처음 사용해보았다. 매우 유용하기 때문에 자주 사용할 것 같다.

 

또 주의해야할 점은 자료형의 문제였다.

6번째 줄의 sorted는 리스트, 튜플로 들어가야 하는 듯하다.

딕셔너리를 그대로 넣으려면 에러가 난다.

 

두번째로 out으로 받은 값도 같이 쌍으로된 튜플or리스트이기 때문에

변환되었다는 것을 잘 생각해야한다.

이런면이 파이썬의 단점 중 하나라는 자료형이 불분명하다는 점으로 보인다.

오히려 C++은 눈에 쉽게 보이기 때문에 별 생각없이 지나갔는데

눈에 안보이니까 더 신경을 써줘야하는 것 같다.

 

dic = {}
cnt = int(input())
for i in range(0, cnt):
    a = input()
    dic[a] = len(a)
out = sorted(dic.items(), key=lambda s: (s[1], s[0]))
for i in out:
    print(i[0])