코드 그라데이션

[Lv.0] 길이에 따른 연산 본문

Java/알고리즘

[Lv.0] 길이에 따른 연산

완벽한 장면 2023. 5. 25. 20:02

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

정수가 담긴 리스트 num_list가 주어질 때, 

리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 

10 이하이면 모든 원소의 곱을 return하도록 solution 함수를 완성해주세요.

 

제한 사항

입출력 예

입출력 예 설명

 

아이디어

  • 11 이상이면 더하고, 10 이하면 곱한다. <= 이 조건을 먼저 검사하고, 실제 작업을 수행하는 게 맞다.
  • 풀이 처음에는 내가 for문을 바깥에 쓰고, num_list.length만큼을 도는 걸 수행하려고 했다.

 

초기 코드

class Solution {
  public int Solution(int[] num_list) {
    int answer = 0;
    if (num_list.length>=11) {
      for (int i=0; i<num_list.length;i++) {
        int count = 1; // 더한 횟수
        int total = 0; // gkq
        total += count;
        count++;

      }
    }
    return answer;
  }
}
  • 이것의 문제
  • 지금 count와 total은 반복이 진행되어도 계속 유지되어야 하는 값이다.
  • 근데 지금 보면 반복문이 수행될 때마다 계속 다시 태어나고 있으니, 반복문 밖으로 빼줄 필요성이 있다.
  • 지금 count를 계속 더하는 것이 아니라, 모든 원소의 합을 구하는 것이다.

조금 고쳐본 코드

class Solution {
  public int Solution(int[] num_list) {
    int answer = 0;
    int total = num_list[0]; // 합
    
    if (num_list.length>=11) {
      for (int i=0; i<num_list.length;i++) {
        total += num_list[i];
        i++;

      }
    }
    return answer;
  }
}
  • 이렇게 바꾸었는데, 사실 여기서는 i가 계속 변하고 있으므로, 사실상 i++; 작업은 필요가 없는게 된다.
  • i가 0부터인데, 여기서 초기값도 0부터이다.
  • 이렇게 되면 첫 번째 원소가 아마 두 번 세어지게 될 것이다.
  • 그래서 total을 아까처럼  0으로 하거나,  i를 1부터 시작하게 하는 식으로 개선하면 이런 문제가 사라질 것이다.
  • 초기값 0은 이미 처음부터 들어가므로, i를 1부터 시작하게 만드는 것이 더 깔끔하지 않을까 싶다.

 

나의 최종 답안

class Solution {
    public int solution(int[] num_list) {
        //11이상이면 더하고, 10이하면 곱한다.
        int answer = num_list[0]; // 합
        if(num_list.length>=11) {
            for(int i=1;i<num_list.length;i++) {
                answer += num_list[i];
            }
        }
        else {
            for(int i=1;i<num_list.length;i++) {
                answer *= num_list[i];
            }
        }
        return answer;
    }
}

 

- 더하기 할 때는 0부터 시작하는게 좋고, 

- 곱하기는 0을 곱하면 항상 0이 나오니까, 1부터 시작하는 게 좋다.

 

- 그런데 이 풀이에서는 첫 번째 원소를 아예 초깃값으로 설정했기 때문에 이러한 더하기 상황을 고려하지 않아도 되었다.

728x90
Comments