[프로그래머스][Level2][Java] 숫자의 표현

2022. 3. 8. 21:48·프로그래머스/Level 2

문제

 

풀이코드

 public int solution(int n) {
        int answer = 1;                     //답
        int sum = 0;                        //합
        int lt = 1;                         //왼쪽 끝
        int rt = 2;                         //오른쪽 끝
        int length = (n/2)+1;               //주어진 숫자의 반값
        if(n == 1){             //n이 1일때, 1반환
            return answer;
        }else{                  //n이 1보다 클때,
            sum = lt+rt;        //lt+rt값을 초기 sum으로 지정
            while(lt != length || rt > length){ //반복문의 탈출 조건
                if(sum >= n){       //sum이 n보다 클 때,
                    if(sum == n){   //sum이 n과 같은지 확인한 후,
                        answer++;   //답의 갯수 1개 증가
                    }
                    sum -= lt;      //그리고 sum에서 lt값을 빼고 1개 증가 시킴
                    lt++;
                }else{              //sum이 n보다 작을 때,
                    rt++;           //rt값을 1개 증가시킴
                    sum += rt;      //sum에 rt를 더함.
                }
            }
        }

        return answer;
    }

처음의 풀이 코드는 이것이었다.

간단히 코드를 설명하자면 123456789이런식으로 있다고 칠때, lt를 왼쪽 끝(1), rt를 오른쪽 끝(2)으로 잡아서

그 사이 수들을 다 더하고 만약에 더한 값이 n보다 크면 lt를 오른쪽으로 한번(2)옮겨서 다시 더한 값을 계산하고

이런식으로 찾는 코드인데 이게 풀기는 이렇게 풀었는데 그냥 for문 2번 쓰면 더 빨리 풀릴 것 같아서 다시 풀어보았다.

 

하지만 for문을 2번 쓰니 속도도 너무 느려지고 효율성도 너무 떨어져서 그냥 위의 방법대로 풀었다. 

왠만한 것은 다 주석에 설명을 달아놓았으나 length를 저렇게 지정한 이유는

어떤 수를 더해서 n을 만든다고 할 때, n의 반값과 그 다음 값(n/2 + 1)을 했을 때가 최대한 적게 더하고

최대한 n에 가깝게 값이 나오므로 length의 값을 저렇게 설정했다.

 

저작자표시 비영리 (새창열림)

'프로그래머스 > Level 2' 카테고리의 다른 글

[프로그래머스][Level2][Java] 다음 큰 숫자  (0) 2022.03.11
[프로그래머스][Level2][Java] 땅따먹기  (0) 2022.03.10
[프로그래머스][Level2][Java] 최솟값 만들기  (0) 2022.03.07
[프로그래머스][Level2][Java] 피보나치 수  (0) 2022.03.07
[프로그래머스][Level2][Java] 행렬의 곱셈  (0) 2022.03.07
'프로그래머스/Level 2' 카테고리의 다른 글
  • [프로그래머스][Level2][Java] 다음 큰 숫자
  • [프로그래머스][Level2][Java] 땅따먹기
  • [프로그래머스][Level2][Java] 최솟값 만들기
  • [프로그래머스][Level2][Java] 피보나치 수
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    [프로그래머스][Level2][Java] 숫자의 표현
    상단으로

    티스토리툴바