재바기
JaeTech
재바기
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • Computer Vision (2)
    • 선형대수학 (9)
    • Papers (1)
    • 알쓸신잡 (7)
    • 삽질 기록 (0)
    • 3D\Multiview Geometry (10)
      • CS231A (10)
    • Computer Science (46)
      • Algorithm (14)
      • JavaScript (3)
      • C || C++ (5)
      • Git || Github (3)
      • Linux (2)
      • DL || ML (5)
      • Operating System (8)
      • Computer Network (0)
      • Database (1)
      • Effective Python (5)
      • Data Communication (0)
    • 회고 (0)
    • Latex (1)

블로그 메뉴

  • 홈
  • 태그

Github

공지사항

  • 주인장에 대해

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
재바기

JaeTech

(C++) 백준 2231번 [분해합]
Computer Science/Algorithm

(C++) 백준 2231번 [분해합]

2021. 2. 13. 11:08
728x90

안녕하세요 평범한 컴공생입니다.

 

오늘은 백준 2231번 문제 [분해합] 알고리즘 포스팅을 해보도록 하겠습니다.

브루트포스 문제이며 쉬운 난이도에 속합니다.

1. 문제 해결 방법 구상하기

 - 먼저 N의 값을 입력받는다.

 - 메모리 제한이 넉넉하므로 완전탐색을 하면 될 듯하다.

 - 1부터 N-1 까지의 모든 수를 분해합하여 N과 같은가 비교하면 될듯하다.

 - 가장 작은 생성자를 구하면 되므로 반복문을 돌리다 생성자를 찾았을 경우 반복문을 탈출하여주면 최솟값만 구할 수 있다.

 - cout해줄 변수의 값에 0을 초기화해주고 값이 나올 경우 변수의 값에 대입을 해주면 될 듯하다. 못 찾았을 경우 그대로 0이 출력되기 때문이다.

 

2. 구상한 아이디어를 바탕으로 코딩하기

#include <iostream>

int main()
{
	using namespace std;

	int N;
	cin >> N; // N 의 값을 입력받는다.

	int num = 0;
	//N보다 작은 모든 수의 분해합을 탐색한다.
	for (int i = 1; i < N; i++) 
	{
		int sum = i;
		int temp = i; 
		/*
		temp라는 변수를 따로 설정해주지 않고 i를 while 문에서 사용하면
		계속 i가 0이 되어 무한히 반복되는 루프가 생성되기 때문에 i 값을 temp에
		복사해주는 것이다.
		*/
		while (1)
		{
			sum += temp%10;
			temp /= 10;
			if (temp == 0)
				break;
		}
		if (sum == N)
		{
			num = i;
			break; // 문제에서 최솟값을 구하기만 하면 되는 것이므로 반복문을 탈출해준다.
		}
	}

	cout << num << endl;

	return 0;
}

처음에 21번 라인의 while 문에서 temp 변수를 따로 설정해주지 않고 i를 그대로 사용하였다. 그 결과 무한루프를 돌게 되었고, 디버깅을 통해 문제점을 확인할 수 있었다. 반복문에서 반복을 위해 사용하는 변수를 함부로 건들면 위험할 수 있다는 교훈을 얻었다. 

 

 

// 피드백 및 문제사항 제기 언제든지 감사히 받겠습니다.

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

'Computer Science > Algorithm' 카테고리의 다른 글

(C++) 백준 11729번 [하노이 탑 이동 순서]  (0) 2021.02.21
(C++) 백준 15686번 [치킨 배달]  (0) 2021.02.21
(C++) 백준 2960번 [에라토스테네스의 체]  (0) 2021.02.18
(C++) 백준 2798번 [블랙잭]  (0) 2021.02.12
(C++) 백준 1475번 [방 번호]  (0) 2021.02.11
    'Computer Science/Algorithm' 카테고리의 다른 글
    • (C++) 백준 15686번 [치킨 배달]
    • (C++) 백준 2960번 [에라토스테네스의 체]
    • (C++) 백준 2798번 [블랙잭]
    • (C++) 백준 1475번 [방 번호]
    재바기
    재바기
    재박이의 테크블로그

    티스토리툴바