본문 바로가기
Algorithm

[Algorithm] Swift 백준 1181번

by ykr0919 2024. 2. 18.

 

 

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

문제접근

문제를 보았을 때 간단한 문제라고 생각했고 가볍게 풀고 넘어가려고 했는데 왼걸 시간 내에 풀지 못했다. 

 

배열을 만들어서 조건을 주어 정렬하려고 했는데 sort() 매소드에 대해서 잘 몰라서 코드가 작성하기 힘들었다... 

 

그래서!!! 공부했다!

 

https://h2kangrok.tistory.com/23

 

[Swift] 배열 정렬 sort와 sorted

공식문서에는 sort()는 컬렉션을 제자리에 정렬합니다.라고 한다. 내가 하고 싶은 것은 배열에서 정렬을 하고 싶은 거고 배열은 컬렉션 타입이니깐 잘 찾은 거 같다!! comparable이 메서드를 호출하

h2kangrok.tistory.com

 

 

정답풀이

 

import Foundation

let n = Int(readLine()!)!
var words: [String] = []

for _ in 0..<n {
    words.append(readLine()!)
}

words = Array(Set(words))
words.sort { $0.count == $1.count ? $0 < $1 : $0.count < $1.count }

words.forEach{ print($0) }

 

 

코드는 간단하다.

 

let n = Int(readLine()!)!
var words: [String] = []

 

먼저 단어의 개수를 받는다. 

입력받은 단어들을 넣어줄 배열을 생성해 준다.

 

for _ in 0..<n {
    words.append(readLine()!)
}

 

반복문을 이용해서 단어들을 받는 즉시 words 배열에 넣어준다,

 

여기서부터 핵심 코드  

 

words = Array(Set(words))
words.sort { $0.count == $1.count ? $0 < $1 : $0.count < $1.count }

 

문제에 조건에 중복된 단어는 하나만 남기고 제거를 해야 한다.

 

우리가 아는 것은 중복을 제거라려면 Set을 사용해야 한다! 

 

words 배열에서 중복된 단어를 제거를 우선 해준다. 

 

여기서 배열을  

 

words = Array()

 

이렇게 사용할 수 있는 건 처음 알았다!

 

words.sort { $0.count == $1.count ? $0 < $1 : $0.count < $1.count }

 

여기서는 이제 단어를 조건에 맞게 정렬해 주는 코드인데 

 

sort() 메서드의 클로저로 해당 조건을 작성해 준다.

 

$0.count == $1.count를 통해 두 문자열의 길이를 비교를 한다! 

 

만약!! 두 길이가 같다면 $0 < $1 알파벳 순으로 순서를 비교해서 정렬하고 

 

만약!! 두 길이가 다르다면 $0.count < $1.count 단어의 길이를 비교해서 정렬한다. 

 

삼황연산자를 이용해서 간단하게 작성을 했다.

 

만약 내가 삼항연산자를 모른다면!! 

 

https://h2kangrok.tistory.com/14

 

[Swift] 삼항연산자

let age: Int = 15 if age >= 20 { print("20 이상입니다.") } else { print("20보다 미만입니다.") } // 20보다 미만입니다. 보통 if 조건문을 작성할 때 모습이다. 삼항연산자는 if ~ else 구문을 한 줄로 쓸 수 있다.

h2kangrok.tistory.com

 

words.forEach{ print($0) }

 

그 후 forEach를 사용해서 words 배열을 순서대로 print 해준다.

 

 

 

 

코테공부는 항상 어렵고 항상 모르는 거 같다.... 그러기에는 내가 열심히 하지 않는다! 

열심히 좀 하자!! 🔥

 

그래도 하나 풀고 모르는 거 알아가면 재미있잖아 ,, 

 

 

 

참고 자료 

 

https://dev-mandos.tistory.com/135

 

 

'Algorithm' 카테고리의 다른 글

[Algorithm] Swift 백준 1676번  (2) 2024.03.15
[Algorithm] Swift 백준 1259번  (1) 2024.03.09
[Algorithm] Swift 백준 1018번  (1) 2024.02.05
[Algorithm] Swift 백준 1157번  (3) 2024.01.09
[Algorithm] Swift 백준 14467번  (3) 2023.11.18