728x90
이 문제는 처음 풀 당시에 사용했던 코드가 여전히 왜 틀린지 모르겠다...
해서 백준에 질문글을 일단 올려놓은 상태다...
전반적으로 간단한 문제였던 것 같다.
이 문제를 풀면서 생각한 논리적 흐름은
- 값을 받을 때 공백(Space)를 기준으로 나눈다.
- 나눈 값들을 array에 저장한다.
- 처음 입력 당시 & 입력 마지막 & 입력 중간 중간 이 세가지 케이스에 각각 공백이 사용 가능하므로
- 각 케이스마다 입력된 공백을 지워주면 우리가 원하는 String의 개수를 알 수 있다.
처음에는 아래와 조금 다른 방식으로 공백이라는 중복값을 array가 인지하지 못하기 때문에
set을 활용하여 공백값을 전부 제거하고 그 중 공백이 포함되는 경우에만 -1을 count에 반영하여 코드를 짰었다.
하지만 어떤 이유인지 아직 이해가 가지 않지만 답이 틀렸고... 아래와 같이 filter를 이용하여 각 원소의 value가 0인 값들은 걸러주었다. (0이면 "" 공백이기 때문에 이를 제거)
* 1152번
import Foundation
let str = readLine()!.components(separatedBy: " ")
var arr = str.filter{($0).count > 0}
print(arr.count)
+ ADD)
import Foundation
var str = readLine()
var arr = str!.components(separatedBy: " ")
var arrToSet: Set = Set(arr)
if arrToSet.contains("") {
print(arrToSet.count - 1)
} else {
print(arrToSet.count)
}
이게 틀렸던 코드이다.
그런데 이유를 알았다..
이유는 바로 같은 단어가 여러번 등장한 경우도 횟수에 포함되어야 한다는 것이었다.
내가 사용한 코드는 공백 뿐만 아니라 만약 The man who wants the prize 와 같은 문장에 the 와 the가 중복되어 카운팅 되지 않는 문제가 있는 것이다..!
너무 간단한 문제였는데 전혀 눈치채지 못하고 있다가 코드를 다시 보니 생각이 났다 ^^;;
처음에 왜 틀린지 몰랐을때 너무 답답했는데 뭐가 틀렸는지 알게 되어 매우 다행이다 :)
정리(Today I Learned)
- 특정 Type을 사용할때 그 Type이 가지고 있는 특성을 확실히 알고 쓰자
- Set은 중복값을 제거한다. 내가 원하는 중복값만 제거하는 것이 아니라, 전부
'TIL > 알고리즘 공부' 카테고리의 다른 글
백준 5622번 Swift 알고리즘 연습 (0) | 2022.08.22 |
---|---|
백준 2908번 Swift 알고리즘 연습 (0) | 2022.08.22 |
백준 1157번 Swift 알고리즘 연습 (0) | 2022.08.16 |
백준 2675번 Swift 알고리즘 연습 (0) | 2022.08.12 |
백준 10809번 Swift 알고리즘 연습 (0) | 2022.08.12 |