been_dev
been_archive
been_dev
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • f-lab (3)
    • project (2)
    • solve (29)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 에프랩
  • jadencase만들기
  • f-lab 2개월 후기
  • specify location
  • Eclipse
  • 숫자의표현
  • 탐욕법
  • 이진변환반복하기
  • f-lab
  • Lombok
  • 문자열
  • 코딩테스트
  • MYSQL
  • 에프랩 2개월 후기
  • 프로그래머스
  • JWT
  • 그리디
  • 버튼미노출
  • 후기
  • 해시
  • 큐
  • 에프랩 1개월 후기
  • 자바
  • Downloading from external resources is disabled
  • f-lab 1개월 후기
  • 자바 백엔드
  • 백준
  • 실행창 작음
  • 완전탐색
  • 스택

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
been_dev

been_archive

solve

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

2024. 11. 4. 18:05

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

 

문제 설명

 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.


1 + 2 + 3 + 4 + 5 = 15
4 + 5 + 6 = 15
7 + 8 = 15
15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.

제한사항

 n은 10,000 이하의 자연수 입니다.

 

입출력 예

n result
15    4

 

아이디어

1) 값을 1씩 증가시키면서 n과 같거나 클 때까지 더한다.
2) 더한 값이 n 과 같으면 answer++, n 보다 크면 다음으로 넘어간다.
3) 시작값도 1씩 증가한다.

1 + 2 + 3 + 4 + 5 == 15 (o)
2 + 3 + 4 + 4 + + 5 + 6 > 15 (x)
3 + 4 + 5 + 6 > 15 (x)
4 + 5 + 6 == 15 (o)
5 + 6 + 7 > 15 (x)
6 + 7 + 8 > 15 (x)
...
15 == 15(o)

 

첫번째 풀이(실패)

시작값을 0으로 초기화하는 문제도 있고, 생각한 내용을 구현하지 못했다.

// 시작점을 0 으로 초기화하는 문제 있음
    private static int old_solution(int n) {
        int answer = 0;

        int num = 1;
        int sum = 0;
        while(num <= n) {

            sum += num;
            if(sum == n) {
                answer++;
                num++;
            } else if(sum > n) {
                num++;
                sum = 0;
            }
        }

        return answer;
    }

 

 

두번째 풀이

다시 생각해보니 이중 포문을 사용하면 원하는 반복을 쉽게 구현할 수 있었다. 

j 변수를 1+i 로 설정하는 부분이 포인트이다.

 private static int solution(int n) {
        int answer = 0;

        for(int i=0; i<n; i++) {
            int sum = 0;
            for(int j=1+i; j<=n; j++) {
                sum += j;
                // System.out.println("sum = " + sum + " j : " + j);
                if(sum == n) {
                    answer++;
                    break;
                } else if(sum > n) {
                    break;
                }
            }
        }

        return answer;
    }

 

'solve' 카테고리의 다른 글

[프로그래머스] Lv2.피보나치 수  (0) 2024.11.05
[프로그래머스] Lv2. 다음 큰 숫자  (0) 2024.11.04
[프로그래머스] Lv2.이진 변환 반복하기  (0) 2024.11.01
[프로그래머스] Lv2.JadenCase 만들기 (문자열)  (0) 2024.10.30
[프로그래머스] Lv2. 최솟값 만들기 (그리디)  (0) 2024.10.29
    'solve' 카테고리의 다른 글
    • [프로그래머스] Lv2.피보나치 수
    • [프로그래머스] Lv2. 다음 큰 숫자
    • [프로그래머스] Lv2.이진 변환 반복하기
    • [프로그래머스] Lv2.JadenCase 만들기 (문자열)
    been_dev
    been_dev

    티스토리툴바