티스토리 뷰
문제
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
알고리즘
정렬, 자료구조
1. n을 입력받는다.
2. 다음 과정을 n번 반복한다.
a. 사용자에게 단어를 입력받는다.
b. set에 삽입에 성공한다면 중복이 되지 않았다는 의미 -> (단어, 길이)를 배열에 저장한다.
c. set 삽입 실패시 다음 반복문으로 넘어가면 된다.
3. 해당 배열을 삼항연산자를 이용해 다음과 같이 정렬하면 된다.
a. 만약 단어의 길이가 같다면 단어(사전순)으로 정렬한다.
b. 그렇지 않다면, 길이를 기준으로 정렬한다.
나의 코드
let n = Int(readLine()!)!
var check = Set<String>()
var words = [(Int, String)]()
for _ in 0 ..< n {
let word = String(readLine()!)
if check.insert(word).inserted { // set 삽입 성공시
words.append((word.count, word)) // 배열에 삽입
}
}
words = words.sorted{ $0.0 == $1.0 ? $0.1 < $1.1 : $0.0 < $1.0 } // 정렬
for i in words {
print(i.1) // 뜻만 출력
}
Key point!
📍 문제를 잘 읽자. 중복 단어가 나올 수 있으며, 이는 반영되지 말아야 한다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Swift] 17471 게리맨더링 풀이 및 코드 (0) | 2023.03.01 |
---|---|
[Swift] 2852 NBA 농구 (1) | 2023.02.01 |
[Swift] 15970: 화살표 그리기 (0) | 2022.05.15 |
[Swift] 백준 20291: 파일정리 (0) | 2022.05.15 |
[Swift] 백준 10825: 국영수 (0) | 2022.05.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬
- COMMIT
- 리플릿
- 코드업
- 16진수 입력
- Swift
- do while
- 정답
- python
- 설명
- 반복문
- CHR
- level1
- 프로그래머스
- baekjoon
- replit
- 이것이 코딩테스트다
- Code up
- ord
- 백준
- 깃허브
- 기초 100제
- for문
- 부르트포스
- CodeUp
- SwiftUI
- 코드 업
- 시간초과
- 레플릿
- 깃
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함