본문 바로가기
코딩 테스트/백준

[백준] (Swift) 10769번: 행복한지 슬픈지

by Dev.Andy 2023. 3. 18.

📌 문제

10769번: 행복한지 슬픈지

 

📌 풀이

  1. 주어진 입력을 배열로 변환한다.
  2. 배열에서 단어를 검사할 때 인덱스의 범위를 초과하면 안되므로, 1번 이전에 문자열에서 임의의 문자 2개를 추가한다.
  3. 배열의 인덱스를 접근하면서 행복한 이모티콘과 슬픈 이모티콘의 개수를 계산한다.
  4. 행복한 이모티콘과 슬픈 이모티콘의 개수를 비교하여 출력의 조건문에 따라 화면 출력한다.

 

📌 코드

// 행복한 얼굴과 슬픈 얼굴에 대한 개수를 변수로 할당
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 문법에 맞춰서 다시 풀어 봐야지.

[백준(baekjoon) 10769] 행복한지 슬픈지

 

댓글