알고리즘 C#

백준 1181번 단어 정렬 C#으로 문제 풀어보기

minsoungdev 2026. 1. 6. 00:22

안녕하세요 박민성입니다.

 

오늘은 백준 1181번 단어 정렬을 풀어 보겠습니다.

문제를 보면

입력은 첫째 줄에는 1보다 크거나 같고 20,000보다 작거나 같은 단어의 개수 N이 주어집니다. 둘째 줄부터 문자열 길이가 50이 넘지 않는 단어가 첫째 줄에 입력받은 단어의 개수만큼 단어들이 한 줄 입력됩니다.

출력을 보면 입력에 들어온 단어들을 첫 번째로 길이가 짧은 것부터 정렬하고 길이가 같으면 사전 수은로 정렬하여 한 줄씩 출력합니다. (단, 중복된 단어는 하나만 남기고 제거해야 합니다.)

 

N이 최대 20,000번이기 때문에 Console.WriteLine()을 20,000번 사용하면 시간 초과 걸릴 것 같아서 StringBuilder을 사용했습니다.

그리고 단어의 개수 N을 a에 입력 받아줍니다. 마지막으로 정렬을 해주기 위해서 단어들을 담을 a크기에 string 배열을 만들어줍니다. 

for문을 돌려서 a만큼 단어를 입력을 받습니다. 하지만 만약에 arr에 그 단어가 있으면 그 수는 arr에 넣지 않고 continue로 건너뜁니다.

만약에 arr에 없다면 arr[i]번째에 b를 넣어줍니다.

arr를 정렬를 해줍니다. 그러면 "길이가 같으면 사전 수은로 정렬"이라는 조건을 충족합니다.

그러고 for문과 foreach를 돌려서 i는 단어의 길이가 최대 50이니 50까지 돌아주고 foreach에서 arr에 나온 j에 길이가 i랑 같으면 sb에 넣어줍니다. 이러면 "길이가 짧은 것부터 정렬"이라는 조건을 충족합니다.

 

마지막으로 sb를 출력해줍니다.

이것이 전체 코드입니다. 

 

이렇게 백준에 제출하였더니

정답이었습니다.