코틀린/코딩테스트

코딩테스트 [숨어있는 숫자의 덧셈 (1)]

정혜현 2024. 6. 17. 09:07

문제

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

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


 

풀이

1. 접근

1.1 관찰

문자열에서 숫자만 꺼내 더해주는 문제

입력 : 문자열

출력 : 정수

 

1.2 계획 

i 정의하기 : my_string의 요소

i 확인하기 : 자연수인지 확인하기

answer에 더하기 : 조건에 일치하면 answer에 더해서 담기

 

 

 

2. 시행착오

2.1 시도

class Solution {
    fun solution(my_string: String): Int {
        var answer: Int = 0
        for(i in my_string){
            if(i.toInt() <= 1000) answer++
        }
        return answer
    }
}

 

검증결과 : 실패. 에러는 없는데 결괏값과 기댓값이 다르다. 결괏값이 문자열의 길이만큼 나왔다. 왜?

 

원인분석 :

1. Chr타입은 아스키코드로 변환된다. 모든 결과가 true로 나와 모든 반복문이 실행됐다.

2. answer에 1만 더해지게 했다. 조건에 일치하는 요소를 더하여 담도록 명령하지 않았다.

따라서 문자열의 요소를 순회하며 매 회 1씩 더해졌으니 문자열의 길이만큼 나온 것이다.

 

해결방안 : 

1. 문자열에서 숫자만 확인하는 방법 알아보기 : 우회하기로 한다. 문자열-정수로 변환

class Solution {
    fun solution(my_string: String): Int {
        var answer: Int = 0
        for(i in my_string) {
            if(i.toString().toInt()) answer += i 
         }
        return answer
    }
}

 

검증결과 : 실패. 

 

원인분석 : 조건문의 조건은 Boolean타입이어야 한다. 따라서 if문의 조건은 문법적으로 틀렸다. 

+2024. 06. 19 조건에 함수를 쓰면 안되는 건 아니었다. 

해결방안 : 한자리 자연수니까 1부터 9까지만 확인하는 것을 조건으로 써본다.

 

class Solution {
    fun solution(my_string: String): Int {
        var answer: Int = 0
        for(i in my_string) {
            if(i in '1'..'9') answer += i.toString().toInt() 
         }
        return answer
    }
}

 

검증결과 : 성공.

 

 

 

 


회고

 

 

오전스크럼에서 공유했더니 강진님께서 Chr형의 변환을 세심히 설명해주신 덕분에 나아갈 수 있었다. 공동체의 힘과 팀원간 소통이 중요하다는 것을 느끼게 해준 따뜻한 시간이었다. 

이번 회차부터 문제 푸는 방법을 변경했는데 확실히 계획을 짜놓고 시작하니 놓치는 게 덜하다. 조건문의 조건을 작성할 때는 맞다, 틀리다를 생각하면서 작성해보기