문제
문자열 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형의 변환을 세심히 설명해주신 덕분에 나아갈 수 있었다. 공동체의 힘과 팀원간 소통이 중요하다는 것을 느끼게 해준 따뜻한 시간이었다.
이번 회차부터 문제 푸는 방법을 변경했는데 확실히 계획을 짜놓고 시작하니 놓치는 게 덜하다. 조건문의 조건을 작성할 때는 맞다, 틀리다를 생각하면서 작성해보기
'코틀린 > 코딩테스트' 카테고리의 다른 글
코딩테스트 [대문자와 소문자] (0) | 2024.06.19 |
---|---|
코딩테스트 [암호 해독] (0) | 2024.06.17 |
코딩테스트 [가위 바위 보] (0) | 2024.06.14 |
코딩테스트 [개미 군단] (0) | 2024.06.13 |
코딩테스트 [아이스 아메리카노] (0) | 2024.06.13 |