티스토리 뷰
백준 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 출력을 하면 해당 문제의 풀이는 끝이나게 됩니다. 이렇게 작성한 코드의 제출 결과는 아래와 같습니다.
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
swift String 처리, 백준 11721 문자열끊어출력하기 풀이 (0) | 2021.02.02 |
---|---|
swift DFS 완전탐색, 백준 15683 감시 문제풀이 (2) | 2021.02.01 |
swift 스택 자료구조 활용, 1935 후위표기식2 문제풀이 (0) | 2021.01.30 |
swift Sorting 값 정렬하는 방법, 백준 수 정렬하기 문제풀이 (2) | 2021.01.29 |
swift Character, 아스키코드 asciiValue값 출력하는 방법들 (0) | 2021.01.28 |
- Total
- Today
- Yesterday
- 알고리즘문제
- swift문제
- SwiftUI
- 백준알고리즘
- 백준swift
- swift string
- 프로그래머스
- swift알고리즘
- ios
- 자연어처리
- Protocol
- 알고리즘
- swift 기초
- 부스트코스
- 컬렉션
- Collection
- CoreML
- swift언어
- swift reduce
- 프로그래머스swift
- swift
- uikit
- 프로토콜
- 개발자문서
- 김프매매
- publisher
- 스위프트
- swift 문자열
- createML
- Swift 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |