📌 문제
📌 풀이
- 주어진 입력을 배열로 변환한다.
- 배열에서 단어를 검사할 때 인덱스의 범위를 초과하면 안되므로, 1번 이전에 문자열에서 임의의 문자 2개를 추가한다.
- 배열의 인덱스를 접근하면서 행복한 이모티콘과 슬픈 이모티콘의 개수를 계산한다.
- 행복한 이모티콘과 슬픈 이모티콘의 개수를 비교하여 출력의 조건문에 따라 화면 출력한다.
📌 코드
// 행복한 얼굴과 슬픈 얼굴에 대한 개수를 변수로 할당
var happyStringCount = 0
var sadStringCount = 0
// 주어진 입력을 input에 문자열로 할당
var input = readLine()!
// 인덱스 초과를 막기 위해 임의의 두 문자를 맨뒤에 추가
input += ".."
// 문자열을 배열로 변환
let arrInput = Array(input)
// 검사할 범위를 배열의 길이에서 임의의 두 문자를 제외한 범위까지 설정
let range = arrInput.count - 2
// 배열의 인덱스를 돌면서 행복한 이모티콘과 슬픈 이모티콘의 개수를 계산
for index in 0...range {
if (arrInput[index] == ":") {
if (arrInput[index + 1] == "-") {
if (arrInput[index + 2] == ")") {
happyStringCount += 1
}
else if (arrInput[index + 2] == "(") {
sadStringCount += 1
}
}
}
}
// 문제의 출력의 조건에 맞춰서 조건문 입력
if (happyStringCount == 0 && sadStringCount == 0) {
print("none")
} else if (happyStringCount > sadStringCount) {
print("happy")
} else if (happyStringCount < sadStringCount) {
print("sad")
} else {
print("unsure")
}
📌 후기
- Swift에서는 문자열에 대한 인덱스 접근이 매우 까다로워서 엄청 애를 먹었다.
- 내가 원하는 건 문자열의 인덱스에 덧셈을 하는 것이었는데 생각처럼 되지 않았다.
- 배열의 인덱스 접근 또한 Swift 반복문의 문법이 익숙지 않아 다시 고생했다.
Python의 range가 엄청 그리웠다... - 문자열로 도저히 풀리지 않아 결국 배열로 변환하여 문제를 풀었다.
다른 언어로 된 풀이를 보니 나처럼 문자열에 임의의 배열을 추가하지 않고, 플래그를 두어 원하는 이모티콘의 세 문자가 하나씩 나올 때마다 업데이트 하는 방식을 찾았는데, 엄청 인상적이었다. 풀이가 Java로 되어 있는데 Swift 문법에 맞춰서 다시 풀어 봐야지.
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] (Swift) 1157번: 단어 공부 (0) | 2023.03.22 |
---|---|
[백준] (Swift) 3613번: Java vs C++ (0) | 2023.03.21 |
[백준] (Swift) 10872번: 팩토리얼 (재귀 vs 반복) (2) | 2023.03.18 |
[백준] (Swift) 10818번: 최소, 최대 (0) | 2023.03.17 |
[백준] (Swift) 11382번: 꼬마 정민 (0) | 2023.03.15 |
댓글