코틀린/코딩테스트

코딩테스트 [가위 바위 보]

정혜현 2024. 6. 14. 10:14

문제

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

 

https://school.programmers.co.kr/learn/courses/30/lessons/120839


 

풀이

1. 접근

1.1 관찰

바위 = 0

가위  = 2

보 = 5

 

기능 : 문자열나누기. 배열에 담기. 반복문for(범위:인덱스 크기) 안에 조건문when(이기는 값을 하나씩 가져와서) 으로 확인하기. 문자열로 합치기

반환 : 문자열 반환

 

 

1.2 준비 

chunked() : 괄호 내 숫자만큼 문자열을 나누는 메소드

joinToString() : 요소들을 하나의 문자열로 합치는 메소드

 

 

2. 시행착오

2.1 시도

  • 가설 : chunked로 문자열을 하나씩 나누고 리스트에 담아서 조건(이기는 숫자를 새로운 리스트에 담도록)을 반복(0부터 리스트 사이즈만큼)하고 합치면 될 것이다.
class Solution {
    fun solution(rsp: String): String {
        var answer: String = ""
        var rspList = rsp.chunked(1)
        var answerList = listOf()
        for(i in 0..rspList.size) {
            when(i) {
                0 -> answerList.add("5")
                2 -> answerList.add("0")
                5 -> answerList.add("2")
            }
       answer = answerList.joinToString()}
    return answer
    }
}

 

/Solution.kt:5:26: error: not enough information to infer type variable T
        var answerList = listOf()
                         ^

  • 검증 : 실패

문제가 많다.

1. for문 범위에 i는 0부터 리스트 사이즈만큼으로 Int형인데 when문의 i는 요소인 Chr형을 가리켜 타입미스매치 상태일 것이다. 

2. Chr형은 ''로 적어야한다. 

3. answerList는 타입이 명시되어야한다. 

그런데 오전 스크럼에서 공유했더니 팀원분들께서 String 문자열은 배열처럼 쪼갤 수 있고 +연산자로 합칠 수 있다고 가르쳐주었다. 

 

 

 

최후의 최선 : 

class Solution {
    fun solution(rsp: String): String {
        var answer: String = ""
        for(i in rsp) {
            when(i) {
                '0' -> answer += '5'
                '2' -> answer += '0'
                '5' -> answer += '2'
            }
        }
        return answer
    }
}

 

 


회고

 

 

String 타입에 대해 새로운 정보를 알았다. 비단 이문제뿐만 아니라 최근에 i를 자주 만나면서 인덱스이기도 하고 요소이기도 하고 무얼 나타내는건지 난해했는데 이제서야 알겠다. i는 특정한 무언가로 정의된 게 아니라 내가 정의 내리고 사용하는거였다.