๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 3943๋ฒˆ: ํ—ค์ผ์Šคํ†ค ์ˆ˜์—ด(๊ตฌํ˜„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜)

by ์ฃผ๋ฐœ2 2020. 2. 21.
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/3943

 

3943๋ฒˆ: ํ—ค์ผ์Šคํ†ค ์ˆ˜์—ด

๋ฌธ์ œ ํ—ค์ผ์Šคํ†ค ์ˆ˜์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ ํ•œ๋‹ค. n์ด ์ง์ˆ˜๋ผ๋ฉด, 2๋กœ ๋‚˜๋ˆˆ๋‹ค. n์ด ํ™€์ˆ˜๋ผ๋ฉด, 3์„ ๊ณฑํ•œ ๋’ค 1์„ ๋”ํ•œ๋‹ค. ํ—ค์ผ์Šคํ†ค ์ถ”์ธก์€ ์ž„์˜์˜ ์–‘์˜ ์ •์ˆ˜ n์œผ๋กœ ์ˆ˜์—ด์„ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด, ํ•ญ์ƒ 4, 2, 1, 4, 2, 1,...๋กœ ๋๋‚œ๋‹ค๋Š” ์ถ”์ธก์ด๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” 1์ด ๋‚˜์˜ค๋ฉด ์ˆ˜์—ด์ด ๋๋‚œ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ˆ˜์—ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ์•„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T(1 ≤ T ≤ 100,000)

www.acmicpc.net

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(bf.readLine());	
		for(int i=0; i<T; i++) {
			int n = Integer.parseInt(bf.readLine());
			int max = n;
			while(n!=1) {
				n = (n%2 == 0) ? n/2 : (n*3)+1;
				max = Math.max(max, n);
			}
			System.out.println(max);
		}
		bf.close();
	}

}

ํ’€์ด

๋ฌธ์ œ์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋ฌธ์ œ ๋ถ„๋ฅ˜์— DP์—ฌ์„œ ๊ณ„์† dp๋งŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ..

๊ทธ๋ƒฅ n์ด 1์ด ๋ ๋•Œ๊นŒ์ง€ ์ง์ˆ˜๋ฉด 2๋กœ ๋‚˜๋ˆ„๊ณ , ํ™€์ˆ˜๋ฉด 3์„ ๊ณฑํ•˜๊ณ  1์„ ๋”ํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ ํ›„ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ์•„์ฃผ๋ฉด ๋.

 

 

 + System.out.println() ๋Œ€์‹  BufferedWriter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ด 1/3์œผ๋กœ ์ค„์–ด๋“ ๋‹ค.

BufferedWriter ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int T = Integer.parseInt(bf.readLine());	
		for(int i=0; i<T; i++){
			int n = Integer.parseInt(bf.readLine());
			int max = n;
			while(n!=1) {
				n = (n%2 == 0) ? n/2 : (n*3)+1;
				max = Math.max(n, max);
			}
			bw.write(max + "\n");

		}
		bw.flush();
		bw.close();
		bf.close();
	}

}

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€