숫자를 연속된 덧셈으로 표현하는 알고리즘

2018. 12. 27. 12:50· Algorithm
목차
  1. 문제
  2. 풀이

문제

수학을 공부하던 민지는 재미있는 사실을 발견하였습니다. 그 사실은 바로 연속된 자연수의 합으로 어떤 숫자를 표현하는 방법이 여러 가지라는 것입니다. 예를 들어, 15를 표현하는 방법은

(1+2+3+4+5)
(4+5+6)
(7+8)
(15)

로 총 4가지가 존재합니다. 숫자를 입력받아 연속된 수로 표현하는 방법을 반환하는 expressions 함수를 만들어 민지를 도와주세요. 예를 들어 15가 입력된다면 4를 반환해 주면 됩니다.

풀이

#include <iostream>
using namespace std;
int expressions(int testCase)
{
  int answer = 0;

  int num = 1, temp = 0;
  for (int i = 1; i <= testCase / 2; i++, temp = 0, num = i)
  {
    while (temp <= testCase)
    {
      temp += num++;
      if (temp == testCase)
        answer++;
    }
  }

  return ++answer;
}

int main()
{
  int testNo     = 15;
  int testAnswer = expressions(testNo);

  // 아래는 테스트로 출력해 보기 위한 코드입니다.
  cout << testAnswer;
}

원래 알고리즘 문제를 풀면서 기본으로 제공되는 코드는 웬만해선 안고치는데

answer 앞에 ++만 붙였다..(괜히 코드가 한 줄이라도 길어지는 것보단 …)

굳이 testCase(15)까지 다 반복하지 않아도 절반 값, 예를 들어 15의 절반은 7(나머지 무시)이기 때문에

7과 그 다음 수인 8까지만 계산하면 된다.

절반 이상의 수, 예를 들어10이면 10과 연속된 자연수를 더해서 15를 만들 수 있는 방법은 존재하지 않기 때문이다.

그 다음은 그냥 시작하는 수(예제에서는 1, 4, 7)부터 1씩 더해가며 누적하여 원래 값 15가 나오면 종료하는 것이다.

마지막으로 ++를 해준 이유는 위 코드로 자기 자신(15)은 계산되지 않기 때문..(절반까지 했으니까요..)

출처

알고리즘 연습 Level 4 | 프로그래머스

저작자표시 동일조건 (새창열림)

'Algorithm' 카테고리의 다른 글

팰린드롬 개수 구하기  (0) 2018.12.27
가장 큰 정사각형 구하기  (0) 2018.12.27
2진수의 1개수가 같은 다음 수 찾기  (0) 2018.12.27
멀리 뛰기 – 수열 알고리즘  (0) 2018.12.27
최소자승합(제곱의 합) 구하기  (0) 2018.12.27
  1. 문제
  2. 풀이
'Algorithm' 카테고리의 다른 글
  • 팰린드롬 개수 구하기
  • 가장 큰 정사각형 구하기
  • 2진수의 1개수가 같은 다음 수 찾기
  • 멀리 뛰기 – 수열 알고리즘
lasiyan
lasiyan
소프트웨어 개발 블로그
lasiyan
LA Dev.
lasiyan
전체
오늘
어제
  • All (85)
    • Modern C++ (3)
      • STL Container (2)
    • Language (14)
      • C++ (13)
      • Python (1)
    • A.I (4)
    • Algorithm (37)
    • Vision (7)
    • System (4)
    • Application (3)
    • Undefined (11)
    • 일상 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • c++
  • JETSON
  • 컨테이너
  • mfc
  • 리눅스
  • C
  • dll
  • yolo
  • Python
  • 소프트웨어개론
  • 딥러닝
  • 윈도우 프로그래밍
  • container
  • 알고리즘
  • 파이썬
  • 표준입출력
  • 영상처리
  • stl
  • 프로그래머스
  • 코딩테스트

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
lasiyan
숫자를 연속된 덧셈으로 표현하는 알고리즘
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.