프로그래머스, 자바스크립트) 숫자의 표현

2024. 11. 13. 23:32·개발/알고리즘(코딩테스트)

문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

문제 접근을 생각해보면...1+2+3+4 연속된 자연수를 가져야 되니 일단 반복문을 돌려서 숫자를 준비한다.

그러면 1+2+3 ... , 2+3+4..., 이런식으로 처음 시작되는 숫자를 기준으로 더한 값을 구할 수 있다. 

n이 되는 연속 합을 찾기 위해 n이 되면 answer를 증가시키고 쓸데없는 반복이 없도록  n 이상이면 break

function solution(n) {
  let answer = 0;

  for (let i = 1; i <= n; i++) {
    //숫자 나열
    let sum = 0;
    for (let j = i; j <= n; j++) {
      //해당 숫자부터 n까지의 합
      sum += j;
      if (sum === n) answer++; //합이 n이면 answer 증가
      if (sum >= 15) break; //합이 15이상이면 탈출
    }
  }
  return answer;
}

다른 풀이

수학적 접근, 연속된 자연수의 합이 n이 되려면, 연속된 숫자의 합 공식을 이용할 수 있다.

(start+start+length−1)×length/2=n. 
start는 연속된 자연수의 시작점, length는 연속된 자연수의 개수
  • 가능한 모든 length 값을 검사한다.
  • length * (length + 1) / 2 <= n 조건은 length가 지나치게 커져서 n을 넘지 않도록 제한한다.
  • (n - (length * (length - 1)) / 2) % length === 0 조건은 n에서 length의 합을 뺀 후 나머지가 0이 되는지 확인하여, 해당 length가 유효한 연속 합을 만드는지 검사한다. 나머지가 0이면 유효한 연속합이므로 answer를 증가
function solution(n) {
  let answer = 0;
  
  for (let length = 1; length * (length + 1) / 2 <= n; length++) {
    // 연속된 숫자의 개수에 따라 시작점을 구함
    if ((n - (length * (length - 1)) / 2) % length === 0) {
      answer++;
    }
  }

  return answer;
}

 

저작자표시 비영리 변경금지 (새창열림)

'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글

프로그래머스, 자바스크립트) 최솟값 만들기  (0) 2024.11.15
프로그래머스, 자바스크립트) 최댓값과 최솟값  (1) 2024.11.14
프로그래머스, 자바스크립트) 삼총사  (0) 2024.11.12
프로그래머스, 자바스크립트) 로또의 최고 순위와 최저 순위  (0) 2024.11.11
프로그래머스, 자바스크립트) 이상한 문자 만들기  (0) 2024.11.10
'개발/알고리즘(코딩테스트)' 카테고리의 다른 글
  • 프로그래머스, 자바스크립트) 최솟값 만들기
  • 프로그래머스, 자바스크립트) 최댓값과 최솟값
  • 프로그래머스, 자바스크립트) 삼총사
  • 프로그래머스, 자바스크립트) 로또의 최고 순위와 최저 순위
빔네모
빔네모
console.log("빔네모")
  • 빔네모
    bimnemo("개발")
    빔네모
  • 전체
    오늘
    어제
    • 기록 (152) N
      • 기술 (42) N
        • JavaScript (6) N
        • TypeScript (9)
        • React.js (10)
        • Next.js (0)
        • 라이브러리,도구 (4)
        • HTML,CSS (4)
        • CS (5)
        • BE (4)
      • 개발 (98)
        • 프로젝트 (0)
        • 트러블슈팅 (5)
        • 알고리즘(코딩테스트) (93)
      • 정보 (4)
      • 취미 (8)
        • 감상 (8)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
빔네모
프로그래머스, 자바스크립트) 숫자의 표현
상단으로

티스토리툴바