728x90

문제

헤일스톤 수열은 다음과 같이 정의 한다.

  • n이 짝수라면, 2로 나눈다.
  • n이 홀수라면, 3을 곱한 뒤 1을 더한다.

헤일스톤 추측은 임의의 양의 정수 n으로 수열을 시작한다면, 항상 4, 2, 1, 4, 2, 1,...로 끝난다는 추측이다. 이 문제에서는 1이 나오면 수열이 끝난 것으로 처리한다.

n이 주어졌을 때, 이 수열에서 가장 큰 값을 찾아 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 100,000)가 주어진다. 다음 줄부터 T개의 줄에는 헤일스톤 수열의 시작값 n이 주어진다. (1 ≤ n ≤ 100,000)

출력

각각의 테스트 케이스에 대해서, n으로 시작하는 헤일스톤 수열에서 가장 큰 값을 출력한다.

예제 입력 1 복사

4 1 3 9999 100000

예제 출력 1 복사

1 16 101248 100000


 

dp로 분류돼있어 dp로 풀려했는데 굳이 필요 없을 것 같아서 그냥 풀었다.

n이 1이 될 때까지 조건에 맞게 홀수, 짝수 연산을 해준 후 최대값을 구해서 반환한다.

 

코드 원본 : https://github.com/chosh95/STUDY/blob/master/BaekJoon/2020/%ED%97%A4%EC%9D%BC%EC%8A%A4%ED%86%A4%20%EC%88%98%EC%97%B4.cpp

 

chosh95/STUDY

프로그래밍 문제 및 알고리즘 정리. Contribute to chosh95/STUDY development by creating an account on GitHub.

github.com

C++ 코드

#include <iostream>
#include <algorithm>
using namespace std;
int T, N;
int dp[100001];

int hale(int n) {
	int ans = 1;
	while (n != 1) {
		ans = max(ans, n);
		if (n % 2 == 0)
			n /= 2;
		else {
			n *= 3;
			n += 1;
		}
	}
	return ans;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> T;
	while (T--) {
		cin >> N;
		printf("%d\n", hale(N));
	}
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 가로수 (2485번)  (0) 2020.06.06
[백준] 동전 바꿔주기 (2624번)  (0) 2020.06.05
[백준] 결혼식 (5567번)  (0) 2020.05.29
[백준] 숨바꼭질 (6118번)  (0) 2020.05.29
[백준] 최소비용 구하기 2 (11779번)  (0) 2020.05.03

+ Recent posts