Algorithm

[Algorithm] Kotlin - 프로그래머스 입문 [ 연속된 수의 합 ]

정상호소인 2024. 3. 10. 05:48

 

🟥 TOPIC = 알고리즘은 최대한 혼자 풀어보고, 풀이가 끝나도 남이 작성한 코드를 많이 봐두자. 

 

 

연속된 수의 합

 

 

문제 - 프로그래머스 코딩테스트 입문 연속된 수의 합

 

  • 문제 설명을 보고 어떻게 풀면 좋을지에 구상하는데만 1 시간을 넘게 쓴 것 같다... 캠프에서 학습할 때 알고리즘에 크게 신경을 안썼던게 아쉽다. 꾸준히 몇 문제씩 풀어보는 시간 갖도록 할 것.
  • 제한사항을 잘 확인해야 한다 

 

첫번째 제출 코드 - 실패

class Solution {
    fun solution(num: Int, total: Int): MutableList<Int> {

    var answer : MutableList<Int> = mutableListOf()
    var a = -total
    var sum = 0
    while (total != sum && total >= sum) {
        var b = 0
        sum = 0
        val list = mutableListOf<Int>()
        while (b <= num-1) {
            b++
            sum += a+b
            list.add(a+b)
            println(sum)
        }
        a++
        answer = list
    }

    return answer
}
}

 

  • 반복문으로 이것 저것 시도하면서 문제 설명 아래에 있는 출력 예시가 전부 표시되는 코드를 만들었다. 만들고 보니까 변수도 a, b로 만들고, 가독성도 안좋고, 작동 방식도 엉터리 구조로 작동되도록 만들었다.
  • 코드 실행에서 4가지 테스트가 정상적으로 작동되어서 제출을 눌렀더니 일부 테스트에서 실패가 나오더라.

 

테스트 실패 원인

  • 7, 10번테스트에서 실패했는데 7, 10 번이 어떤 테스트인지 몰라서 질문하기 탭으로 들어갔더니 7번 테스트가 total이 0이더라. 작성 코드에는 while 문 조건이 total이 total != sum 이라, 테스트에 통과하지 못했던 것.
    • 문제 제한사항에 total은 0이상이라는 조건이 있는데 제한사항을 읽어보지 않아서 생긴 문제

 

 

두번째 제출 코드 - 찝찝한 성공

class Solution {
    fun solution(num: Int, total: Int): MutableList<Int> {

    var answer : MutableList<Int> = mutableListOf()
    var startNum = -num
    var sum: Int? = null

    while (total != sum) {
        var count = 0
        sum = 0
        val list = mutableListOf<Int>()
        while (count <= num-1) {
            count++
            sum += startNum+count
            list.add(startNum+count)
        }
        startNum++
        answer = list
    }

    return answer
    }
}
  • 변수 이름도 바꾸고 total이 0이어도 while 문이 작동할 수 있도록 일부 수정한 뒤 제출. 통과가 되긴 했으나 작동 방식이 너무 보잘 것 없는 코드.

  • total 값이 클 경우에도 1자리 수부터 차근차근 올라가는 문제를 해결하려고 다른 분들의 풀이를 보다가 좋은 방법이 보여서 적어두려고 한다.

 

주관적인 모법답안 - 프로그래머스 참조

프로그래머스 '조용현' 님 풀이

  • 연속된 정수에 평균값으로 접근하여 시작점과 끝점을 찾아서 적용하는 방법으로 푼 답안을 수포자로서 감탄하면서 봤다. 숫자랑 친해져야겠다는 깨달음을 준 답안.

 

 

 

 

 


 

[ A. 오늘 복습한 내용 / B. 다음에 학습할 내용 ]

A. 특별하게 복습한 내용은 없지만 꾸준한 알고리즘 학습의 중요성을 느낌.

 

B. 확률과 통계

 

B. 수학

 


 

[느낀 점]

1. 숫자랑 친해져야겠다... 아는게 있어야 보이는게 더 많아질 것 같다