티스토리 뷰

반응형

 

 


백준 1181번, 단어정렬 문제 설명

오늘 풀어볼 문제는 백준의 1181번, 단어정렬 문제입니다.

solved.ac 기준 실버5로 코딩테스트로 보면 초반에 나올 수 있는 수준의 문제입니다. 

 

 

 

 

시간제한은 2초, 메모리제한은 256MB입니다. 

해당문제의 요지는 매우 간단합니다. 입력받은 단어들을 아래 우선순위로 정렬하면 됩니다. 

1) 길이가 짧은 순 

2) 길이가 같다면 사전순으로 정렬

 

위와 같은 2가지 조건을로 정렬한 결과를 개행 단위로 출력하면 되는 문제입니다. 아래는 입출력 예시입니다. 

 

 

 

 

입력받은 단어의 갯수 N을 받고, N개의 단어를 입력받습니다. 그리고 정렬한 결과를 우측 출력예시와 같이 출력하면 됩니다.

바로 swift언어로, dictionary, Array 자료구조와 joined, sorted 고차함수 등을 활용해서 문제 풀어보겠습니다.

 

 

 

 


백준 1181번, 단어정렬 swift 문제풀이
N 입력 후 Dictionary, Array 준비

1행) N 정수를 입력 받습니다.

2행) SV는 입력받은 문자열을 저장하는 리스트입니다.

3행) dic은 문자열 중복체크 + 각 문자열의 길이를 저장해놓는 dictionary 딕셔너리입니다. 왜 이걸 사용하는지는 아래에서 설명하겠습니다.

 

 

 

 


문자열 중복 체크 후 문자열 배열 준비

5행) N개의 문자열을 입력받고,

6 ~ 9행) 문자열 중복체크를 합니다. 중복이 없으면 SV리스트에 추가하고 해당 문자열의 길이도 dic에 기록합니다.

사전에 dic에 각 문자열의 길이를 기록하는 이유는 이후 sorted()를 통해 정렬을 하게 될때 클로져 내부에서 count를 다차례 접근하게 됩니다. 이때 길이체크 간의 시간복잡도를 O(N) -> O(1)로 줄이기 위함입니다. 

randomAccessCollection이 아닌 DidirectionalCollection인 문자열의 count 시간복잡도는 O(N)입니다.

 

 

 


sorted, joined 고차함수 활용하여 문자열 정렬 결과 출력하기

이제 핵심 구현부입니다.

16행) 정렬함수, sorted를 활용해서 앞서 만들었던 문자열의 리스트, SV를 정렬한 새로운 배열을 만듭니다. 그 조건은 문자열의 길이가 짧은것을 우선으로, 만약 문자열 길이가 같다면 사전순으로 정렬하는 코드입니다.

dic[$0]! < dic[$1]!가 문자열의 길이순 정렬, $0 < $1가 문자열의 사전순 정렬을 의미하는 조건식입니다.

 

 

17행) 이어서 정렬된 배열을 joined를 활용, 개행(\n)단위로 합쳐서 print 출력을 하면 해당 문제의 풀이는 끝이나게 됩니다. 이렇게 작성한 코드의 제출 결과는 아래와 같습니다.

 

 

 


백준 1181 단어정렬 swift 문제풀이 제줄결과

 

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함