문제
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
암호화된 문자열 cipher를 주고받습니다.
그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/120892
풀이
1.1 관찰
문자열에서 변수의 배수번째 문자만 출력하는 문제
입력 : 문자열, 정수
출력 : 문자열
배수번째 문자를 꺼내야하므로 인덱스 번호를 확인해야겠다.
1.2 계획
반복하기 : cipher 모든 문자 반복하기.
조건달기 : code의 배수가 맞는지 확인하기. 확인은 인덱스번호로 한다.
answer에 더하기 : 조건에 일치하면 answer에 더해서 담기
2. 시행착오
2.1 시도
class Solution {
fun solution(cipher: String, code: Int): String {
var answer: String = ""
for(i in cipher.indices) {
if(i != 0 && i % code == 0) answer += cipher[i-1]
}
return answer
}
}
검증결과 : 실패. 에러는 없는데 결괏값과 기댓값이 다르다. 마지막 인덱스번호를 못담는다.
원인분석 : i가 반복 횟수에 비례한 숫자라는 점을 응용하느라 cipher의 인덱스번호로 정의했지만 인덱스는 0번부터 시작해서 0으로는 code를 나눌 수 없다. 그래서 0이 아니어야된다는 조건을 걸었고 인덱스는 0부터 시작하지만 요소는 1번째부터 적용해야돼서 []인덱스번호에 -1을 걸었다. 여기까진 좋았으나 마지막 인덱스를 고려하지 못했다. 인덱스 번호는 언제나 마지막 요소보다 -1 작기 때문에 담을 수는 있게 설정했지만 확인할 수가 없다.
해결방안 : 인덱스 번호가 아닌 문자열의 길이로 범위를 수정한다.
class Solution {
fun solution(cipher: String, code: Int): String {
var answer: String = ""
for(i in 0 .. cipher.length) {
if(i != 0 && i % code == 0) answer += cipher[i-1]
}
return answer
}
}
굳이 0번부터 범위를 설정하고 0이 아니라는 조건을 걸 필요가 없다.
class Solution {
fun solution(cipher: String, code: Int): String {
var answer: String = ""
for(i in 1 .. cipher.length) {
if(i % code == 0) answer += cipher[i-1]
}
return answer
}
}
팀원분의 시선에서 해석하고 문제풀이를 한 뒤 성능을 향상시키는 방법까지 블로그 하단에 잘 정리해주셨다. 감사합니다! https://tsi0511.tistory.com/96
2024. 06. 26 와... 강의와 개인프로젝트에 집중하느라 비공개로 해둔 이 코딩테스트를 오늘 정리하게 된건데 이틀 전 String이 참조변수인 것을 알았고 오늘 StringBuilder를 배웠더랬다. https://hhyun-s2.tistory.com/85
이 문제를 풀 당시에는 '나중엔 성능도 고려해야 되는구나' 정도로만 새겨졌는데 지금보니 왜 필요한거고 무슨 설명을 하고 있는지 이해된다!!!! 아는만큼 보인다 정말
회고
일주일 전에는 막막했던 문제였고 설명도 이해하기 어려웠는데 혼자 풀어낼 수 있고 설명도 이해할 수 있게 됐다.
개인프로젝트를 공유해보니까 나는 코드구현도 겨우 했는데 기능은 물론이고 예쁜 UI까지 갖춘 작품이 많았고, 사람들과 모여 학습내용을 나누다보니까 내 지식의 최정상은 그들의 기저였다. 능력의 차이는 더 배울 수 있다는 지표가, 더 배우고 싶다는 욕심이 되어주므로 타인과 나를 비교하지 않을 수는 없다.
다만 나를 성장시킬 감사한 기회와 내가 성장해야 될 목표치로만 설정하고 흔들리지 말 것
'코틀린 > 코딩테스트' 카테고리의 다른 글
코딩테스트 [가장 큰 수 찾기] (0) | 2024.06.19 |
---|---|
코딩테스트 [대문자와 소문자] (0) | 2024.06.19 |
코딩테스트 [숨어있는 숫자의 덧셈 (1)] (0) | 2024.06.17 |
코딩테스트 [가위 바위 보] (0) | 2024.06.14 |
코딩테스트 [개미 군단] (0) | 2024.06.13 |