๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 4881_์ž๋ฆฌ์ˆ˜์˜ ์ œ๊ณฑ

๋ฟŒ์•ผ._. 2025. 6. 25. 16:46
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/4881)

< ์ž๋ฆฌ์ˆ˜์˜ ์ œ๊ณฑ >

 

๋ฌธ์ œ ํ’€์ด 

 

๊ฐ ์ˆซ์ž์˜ ์ˆ˜์—ด์„ ๊ตฌํ•œ ํ›„ ๊ฐ™์€ ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ํ•„์š”ํ•œ ์ˆ˜์—ด์˜ ๊ธธ์ด์˜ ํ•ฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

 

my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class _4881_ { // ์ž๋ฆฌ์ˆ˜์˜ ์ œ๊ณฑ

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

		String a = "", b = "";

		while (!(a = st.nextToken()).equals("0") && !(b = st.nextToken()).equals("0")) {
			bw.write(a + " " + b + " ");

			if (a.equals(b)) {
				bw.write("2\n");
				st = new StringTokenizer(bf.readLine());
				continue;
			}

			ArrayList<String> listA = new ArrayList<>();
			listA.add(a);

			while (true) {
				int sum = 0;
				for (int i = 0; i < a.length(); i++) {
					sum += (a.charAt(i) - '0') * (a.charAt(i) - '0');
				}
				a = Integer.toString(sum);
				if (listA.contains(a)) {
					break;
				}
				listA.add(a);
			}

			int result = 1;
			ArrayList<int[]> list = new ArrayList<>();

			Set<String> set = new HashSet<>();
			set.add(b);

			if (listA.contains(b)) {
				list.add(new int[] { Integer.parseInt(b), result });
			}
			while (true) {
				int sum = 0;
				for (int i = 0; i < b.length(); i++) {
					sum += (b.charAt(i) - '0') * (b.charAt(i) - '0');
				}
				b = Integer.toString(sum);
				result += 1;

				if (set.contains(b)) {
					break;
				}

				if (listA.contains(b)) {
					list.add(new int[] { Integer.parseInt(b), result });
				}

				set.add(b);
			}
			if (list.size() == 0) {
				bw.write("0\n");
			} else {
				result = Integer.MAX_VALUE;
				for (int j = 0; j < list.size(); j++) {
					int temp = list.get(j)[1];
					for (int i = 0; i < listA.size(); i++) {
						temp += 1;
						if (listA.get(i).equals(Integer.toString(list.get(j)[0]))) {
							break;
						}
					}
					result = Math.min(result, temp);
				}
				bw.write(result + "\n");
			}
			st = new StringTokenizer(bf.readLine());
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
a, b : ์ž…๋ ฅ๊ฐ’
listA : a์˜ ์ˆ˜์—ด
sum : ๊ฐ ์ž๋ฆฟ์ˆ˜์˜ ์ œ๊ณฑ์˜ ํ•ฉ
result : b์˜ ์ˆ˜์—ด ์ˆœ์„œ, ๋‘ ์ˆ˜์—ด์˜ ๊ธธ์ด์˜ ํ•ฉ์˜ ์ตœ์†Ÿ๊ฐ’
list : a์™€ b์˜ ๊ฐ™์€ ์ˆ˜๊ฐ€ ๋‚˜์™”์„ ๋•Œ์˜ ๊ฐ’๊ณผ b ์ˆ˜์—ด ์ˆœ์„œ
set : b์˜ ๋ฐ˜๋ณต ์‚ฌ์ดํด ์ข…๋ฃŒ ํŒ๋ณ„์„ ์œ„ํ•œ HashSet

 

a์™€ b๊ฐ€ 0์ด ์•„๋‹ ๋•Œ๊นŒ์ง€ ์ž…๋ ฅ๋ฐ›์•„ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) a์™€ b๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ˆ˜์—ด์˜ ๊ธธ์ด์˜ ํ•ฉ์ด 2์ด๋ฏ€๋กœ 2 ์ถœ๋ ฅ ๋ฐ ๋‹ค์Œ ์ž…๋ ฅ

2) a์˜ ์‚ฌ์ดํด์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ์ž๋ฆฟ์ˆ˜์˜ ์ œ๊ณฑ์˜ ํ•ฉ์„ ๊ตฌํ•œ ํ›„ listA์— ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ์ €์žฅ

3) b์˜ ์‚ฌ์ดํด์„ ๊ตฌํ•˜๋ฉฐ set์— ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ์กด์žฌํ•˜๋ฉด ์ข…๋ฃŒ, ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด listA์— ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์žˆ๋‹ค๋ฉด list์— ๊ฐ™์€ ์ˆ˜์™€ ์ˆ˜์—ด ์ˆœ์„œ ์ €์žฅ

4) ๋งŒ์•ฝ list์˜ ํฌ๊ธฐ๊ฐ€ 0์ด๋ผ๋ฉด ๊ฐ™์€ ์ˆ˜๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ 0 ์ถœ๋ ฅ

5) list๋ฅผ ์ˆœํ™˜ํ•˜๋ฉด์„œ listA์—์„œ ๊ฐ’์˜ ์ˆœ์„œ๋ฅผ ์ฐพ์•„ ์ˆ˜์—ด์˜ ๊ธธ์ด์˜ ํ•ฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•จ

6) ์ตœ์ข… result ์ถœ๋ ฅ



 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 15323_ZigZag  (1) 2025.06.27
[Baekjoon] 13732_Falling Apples  (2) 2025.06.26
[Baekjoon] 19605_Cyclic Shifts  (1) 2025.06.24
[Baekjoon] 9843_LVM  (2) 2025.06.20
[Baekjoon] 9512_Languages  (1) 2025.06.18