반응형
문제 해결
1. D4 - 정렬
2. sorted를 사용하면 쉽게 해결할 수있다
3. 먼저 이름의 길이순으로 정렬하고
4. 두번째로 이름의 길이가 같을 때 이름의 알파벳 순서대로 정렬한다.
✌ sorted() 함수에 대해서 알아보자.
sorted 함수는 배열을 정렬하는 기능을 가지고 있다. 이 함수를 기본값으로 쓰게 되면 정렬된 배열을 반환한다.
a = [6, 3, 4]
b = sorted(a) # 첫번째 인자로 정렬할 리스트를 넣어준다.
print(b) # [3, 4, 6]
sorted의 두번째 인자로는 정렬하는 방법을 설정할 수 있다. 기본값으로는 우리가 흔히 알고 있는 1,2,3 a,b,c 오름차순 정렬이다.
a = [(1,5), (2, 4), (2, 3)]
print(a) # [(1, 5), (2, 4), (2, 3)]
b = sorted(a, key=lambda x: (x[0], x[1]))
print(b) # [(1, 5), (2, 3), (2, 4)]
이렇게 key에 정렬할 방법을 적는다. x는 배열의 요소 하나하나 이다. 여기서 사용한 방법은 각요소의 첫번째 요소로 정렬을 하고, 만약 같을 경우 각요소의 두번째 요소로 다시 정렬 한다. 이렇게 여러가지 조건으로 한번에 정렬이 가능하다.
소스 코드
for tc in range(1, int(input()) + 1):
n = int(input())
names = [input() for _ in range(n)]
names = list(set(names))
a = sorted(names, key=lambda x: (len(x), x))
print('#{}'.format(tc))
for name in a:
print(name)
출처: SW Expert Academy
문제: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWqU0zh6rssDFARG
염라대왕은 이승의 사람들의 모든 이름을 가지고 있다. 어느날 저승에 일어난 진도 8.0 지진에 항상 정리되어 있던 이승 명부가 흐트러졌다. 이승 명부는 이름의 길이가 짧을수록 이 앞에 있었고, 같은 길이면 사전 순으로 앞에 있었다. 이왕 이렇게 된 김에 모든 이름을 다시 정리하고 같은 이름은 하나만 남겨놓기로 한 염라대왕을 도와주자. [입력] 첫 번째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 50)가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 이승 명부의 이름 개수 N(1 ≤ N ≤ 20,000)이 주어진다. 각 테스트 케이스의 두 번째 줄부터 N개의 줄에 걸쳐서 알파벳 소문자로 이루어진 이름들이 주어진다. 이름에는 공백이 포함되지 않으며 최소 1개, 최대 50개의 알파벳으로 이루어져 있다. [출력] 각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고, 정리된 이름을 한 줄에 하나씩 출력하라. 같은 이름은 한 번만 출력해야 하는 것을 주의하라. |
반응형
'Algorithm Problem > Python' 카테고리의 다른 글
[python] SWEA - 7465. 창용 마을 무리의 개수 / 10200. 구독자 전쟁 (0) | 2020.08.05 |
---|---|
[python] SWEA - 6959. 이상한 나라의 덧셈게임 / 6485. 삼성시의 버스 노선 (2) | 2020.08.04 |
[python] SWEA - 5432. 쇠막대기 자르기 (0) | 2020.07.31 |
[python] SWEA - 4613. 러시아 국기 같은 깃발 (0) | 2020.07.30 |
[python] SWEA - 3752. 가능한 시험 점수 (2) | 2020.07.29 |