iOS/Programmers

[Swift] lv.1 수박수박수박수박수박수? | Programmers

sngsp 2024. 3. 8. 12:50

문제 설명

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

제한 조건

n은 길이 10,000이하인 자연수입니다.

1차 고민

맨 처음에는 while문으로 입력값인 n을 var num에 담아서 홀수 짝수마다 번갈아가며 arr에 담고 joined()를 통해서 문자열을 리턴하고자 했다.
그런데 생각해보니 3일 때는 수박수, 4일 때는 수박수박이 나와야하는데
내 방식대로 할 경우 3을 입력하면 박수박 이 리턴될 것이 뻔했다.

배열의 끝 인덱스부터 채우는 느낌으로 stack 개념을 활용한 배열을 사용했다면 할 수 있었겠지만 그렇게까지 비효율적으로? 라는 생각이 들었기에
그냥 n이 어떤 수가 되든 1부터 세어버리면 되겠다는 느낌을 받았고, for문을 쓰기로 했다. (사실 while n >= i) 도 되었을 것 같기는 하다.

1차 코드

func solution(_ n:Int) -> String {

    var res = ""

    for i in 1...n {
        if i % 2 == 1 {
            res.append("수")
        } else {
            res.append("박")
        }
    }
    return res
}

1차 결과

잘 맞았다!

다른 사람의 풀이

func solution(_ n:Int) -> String {
    return "\(String(repeating: "수박", count: n / 2))\(n % 2 == 0 ? "" : "수")"
}

수박을 repeating해서 홀수일 경우 "수"를 더해주는 간단한 코드...
가독성이 너무 좋다.