Post

프로그래머스 LV2 "숫자의 표현"

프로그래머스 Lv2 숫자의 표현

기초부터 다시 공부를 하기위해 프로그래머스 라는 사이트에서 코딩테스트를 LV0 부터 가능한곳까지 못하는곳은 레퍼런스를 찾아가며 풀어보려고 합니다.

매일 1개의 풀이를 하고 그 풀이에대한 나의 생각 및 해석을 적어보려합니다.

오늘은 LV2 네번째 문제 ‘숫자의 표현’ 문제입니다.

프로그래머스 이미지

위 이미지가 프로그래머스 코딩문제입니다.

문제는 자연수 n이 주어졌을 때, n을 연속된 자연수들의 합으로 표현하는 방법의 수를 구하는 것입니다. 예를 들어, n = 15일 때 4가지 방법으로 표현할 수 있습니다:

  1. 1+2+3+4+5=15
  2. 4+5+6=15
  3. 7+8=15
  4. 15=15

이제 기본 세팅 코드도 알아보겠습니다.

1
2
3
4
function solution(n) {
  let answer = 0;
  return answer;
}

우선 함수 안에 매개변수로 n 이 있습니다. 출제자가 해당 매개변수에 임의의 값을 넣어주면 함수의 리턴 값으로 답을 알려주면 되는 간단한 코드입니다.

여기서 연속된 자연수란?

연속된 자연수란 숫자들이 순서대로 나열된 것을 의미합니다. 예를 들어, 1, 2, 3, 4, 5와 같은 수열이 있습니다. 이 문제에서는 이러한 연속된 숫자들의 합이 주어진 자연수 n과 같은 경우를 찾아야 합니다.

연속된 자연수는 위와 같은 형태인것을 한번 알아보았습니다. 그리고 오늘은 중첩반복문을 사용해 문제를 해결해 보겠습니다. 문제를 풀기전에 중첩반복문에 대해서 간략하게 알아보고 문제를 해결해 보겠습니다.

중첩 반복문

중첩 반복문은 반복문 안에 또 다른 반복문이 들어있는 구조입니다. 자바스크립트에서 중첩 반복문은 다차원 배열을 처리하거나 복잡한 데이터 구조를 탐색할 때 사용됩니다.

기본 예제

1
2
3
4
5
6
for (let i = 0; i < 3; i++) { // 외부 반복문
  console.log(`외부 반복문: i = ${i}`);
  for (let j = 0; j < 2; j++) { // 내부 반복문
    console.log(`  내부 반복문: j = ${j}`);
  }
}

2차원 배열 예제

1
2
3
4
5
6
7
8
9
10
11
let matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

for (let i = 0; i < matrix.length; i++) { // 행 반복
  for (let j = 0; j < matrix[i].length; j++) { // 열 반복
    console.log(`matrix[${i}][${j}] = ${matrix[i][j]}`);
  }
}

주의사항

  1. 성능 문제: 반복 횟수가 많아질수록 성능에 영향을 미칠 수 있습니다.

  2. 복잡성 증가: 가독성을 떨어뜨릴 수 있으므로 적절히 사용해야 합니다.

  3. 제어: breakcontinue를 사용하여 반복문을 제어할 수 있습니다.

중첩 반복문은 다차원 배열이나 복잡한 데이터 구조를 처리할 때 유용하지만, 성능과 코드 가독성에 주의해야 합니다.

그럼 중첩반복문을 이용한 코드의 결과를 한번 작성해 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function solution(n) {
    let answer = 0;
    for (let i = 1; i <= n; i++) {
        let sum = 0;
        for (let j = i; j <= n; j++) {
            sum += j;
            if (sum === n) {
                answer++;
                break;
            } else if (sum > n) {
                break;
            }
        }
    }
    return answer;
}

위 코드의 간단한 설명을 알려드리겠습니다.

  1. 함수 solution은 매개변수로 자연수 n을 받습니다.

  2. answer 변수를 0으로 초기화하여, n을 연속된 자연수들의 합으로 표현하는 방법의 수를 저장합니다.

  3. 첫 번째 for 루프는 1부터 n까지 순회하며, 이는 연속된 숫자들의 시작점을 나타냅니다.

  4. 두 번째 for 루프는 시작점 i에서 시작하여 n까지의 숫자들을 순회하며 합계를 계산합니다.

  5. 만약 현재 합계가 n과 같다면, 이는 유효한 표현 방법이므로 answer1 증가시키고 내부 루프를 종료합니다.

  6. 만약 현재 합계가 n보다 커진다면, 더 이상 계산할 필요가 없으므로 내부 루프를 종료합니다.

그럼 문제의 식이 완성되었으니 프로그래머스에 한번 확인해보겠습니다.

프로그래머스 이미지

성공이네요!

오늘은 프로그래머스 LV2 ‘숫자의 표현’ 문제의 대해서 알아봤습니다.

제 방법이 꼭 정답은 아니니 그저 이런방법도 있구나하고 참고용으로만 봐주시면 감사하겠습니다.

감사합니다.

This post is licensed under CC BY 4.0 by the author.