-
[BAEK JOON] 1181. 단어 정렬공부/알고리즘 2024. 4. 17. 15:57
1. 문제링크
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
2. 해설
처음 문제를 봤을 때 ord를 이용해 유니코드 값으로 비교를하거나 len값을 이용해서
문제를 풀어야겠다 생각했다.
//최소값을 이용해서 정렬하기 alpa = [] lenth = [] sort_data = 0 output = [] n = int(sys.stdin.readline()) for i in range(n): alpa.append(sys.stdin.readline().strip()); sort_data = sorted(alpa); for j in sort_data: lenth.append(len(j)); for l in range(n): minindex = lenth.index(min(lenth)); if(sort_data[minindex] not in output): output.append(sort_data[minindex]); sort_data.remove(sort_data[minindex]); lenth.pop(minindex); print(*output, sep='\n');
하지만 문제를 풀면서 위 방식으로는 시간초과가 나오는 경우가 있었다.
그래서 다른 사람들은 어떤식으로 해결했을지 학습하면서 sort함수의 문자열 정렬을 통해
이 문제를 해결할 수 있다고 생각해서 다른방식으로 수정하게 됐다.
import sys alpa = [] set_list = [] re_list = [] n = int(sys.stdin.readline()) for i in range(n): alpa.append(sys.stdin.readline().strip()); set_list = set(alpa) re_list = list(set_list) re_list.sort() re_list.sort(key = len) print(*re_list, sep='\n');
정렬한다해도 정렬함수는 기본적으로 오름차 순으로 정렬되기 때문에
각 문자열의 길이를 비교해 순서를 정렬하는 부분이 남아있었다.
이 부분은 정렬을 응용하는 방식을 통해 해결이 가능했다.
re_list.sort(key = len)와 같이 정렬을 이용하면 key의 기준을 문자열로 설정해서
문자열의 길이 기준으로 짧은 순서대로 정렬해줘서 문제를 풀 수 있었다.
참고 글
[python] list 값들의 length에 따라서 정렬(sort)하기
앞으로는 항상 기능이 있는지 먼저 찾아봐야겠습니다. 내림차순으로 정렬하기
blog.naver.com
[python] sorted(), sort(), key 사용법
정렬과 관련한 문제를 해결하다가 sort에 대한 key의 기준에 대해서 정리하게 되었다.sorted와 sort는 근본적으로 매우 유사하다.하지만 사용방법에서의 약간의 차이가 있다.바로 알아보도록 하자.
velog.io
'공부 > 알고리즘' 카테고리의 다른 글
[BAEK JOON] 1094. 막대기 (Python) (0) 2024.04.25 [BAEK JOON] 2822. 점수 계산 (Python) (0) 2024.04.18 [BAEK JOON] 2896. 무알콜 칵테일 (0) 2024.04.09 [BAEK JOON] 5598. 카이사르 암호 (0) 2024.04.04 [BAEK JOON] 2083. 럭비클럽 (1) 2024.04.03