๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2697_๋‹ค์Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ

๋ฟŒ์•ผ._. 2024. 4. 15. 16:28

Silver II

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/2697)

< ๋‹ค์Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ >

 

๋ฌธ์ œ ํ’€์ด 

 

๋ฌธ์ œ ์˜ˆ์‹œ์—์„œ ์ฃผ์–ด์ง„ 279134399742๋ฅผ ๊ฐ€์ง€๊ณ  ์„ค๋ช…ํ•ด ๋ณด์ž.

๋’ค์—์„œ๋ถ€ํ„ฐ ๊ฐ’์„ ํ™•์ธํ•˜๋ฉด์„œ ํ˜„์žฌ ์œ„์น˜ ๊ฐ’๋ณด๋‹ค ๋’ค์— ์žˆ๋Š” ๊ฐ’ ์ค‘์—์„œ ํฐ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

๋จผ์ €, 2๋Š” ๋งˆ์ง€๋ง‰ ๊ฐ’์ด๋ฏ€๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

๋‹ค์Œ ๊ฐ’์ธ 4๋ฅผ ํ™•์ธํ–ˆ์„ ๋•Œ ๋’ค์— 2๋ฐ–์— ์—†์œผ๋ฏ€๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

๊ทธ๋‹ค์Œ์€ 7์ด์ง€๋งŒ ๋’ค์— 7๋ณด๋‹ค ํฐ ๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ–ˆ์„ ๊ฒฝ์šฐ 3์ผ ๋•Œ ๋’ค์— ํฐ ๊ฐ’์ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ 3๋ณด๋‹ค ํฐ ๊ฐ’์ด 9,9,7,4์™€ ๊ฐ™์ด 4๊ฐ€ ์žˆ์ง€๋งŒ ๋‹ค์Œ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด 4๋กœ ๊ต์ฒดํ•œ๋‹ค. ๊ทธ๋Ÿผ 2791344๊ฐ€ ๋˜๊ณ  ๋‚จ์•„์žˆ๋Š” 39972๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

 

 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.Collections;

public class _2697_ { // ๋‹ค์Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ

	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++) {
			String a = bf.readLine();

			ArrayList<Integer> list = new ArrayList<>();
			int idx = -1;
			int num = -1;

			for (int j = a.length() - 1; j >= 0; j--) {
				list.add(a.charAt(j) - '0');

				Collections.sort(list, Collections.reverseOrder());
				if (list.get(0) != a.charAt(j) - '0') {
					idx = j;
					for (int k = list.size() - 1; k >= 0; k--) {
						if (a.charAt(j) - '0' < list.get(k)) {
							num = list.get(k);
							break;
						}
					}
					break;
				}
			}

			if (idx == -1) {
				bw.write("BIGGEST\n");
			} else {
				String result = a.substring(0, idx);
				result += num;
				boolean flag = false;
				Collections.sort(list);
				for (int j = 0; j < list.size(); j++) {
					if (!flag && list.get(j) == num) {
						flag = true;
						continue;
					}
					result += list.get(j);
				}
				bw.write(result + "\n");
			}
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
t : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜
a : ์ˆ˜ A
list : ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ํฐ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ
idx : ํฐ ์ˆ˜๋กœ ๊ต์ฒดํ•  ์ธ๋ฑ์Šค
num : ํฐ ์ˆ˜๋กœ ๊ต์ฒดํ•  ๊ฐ’
result : ๋‹ค์Œ ์ˆ˜

 

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜๋งŒํผ ์ˆ˜ A๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. A๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค์Œ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

1) A๋ฅผ ๋’ค์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋ฉฐ list์— ์ถ”๊ฐ€ํ•œ๋‹ค.

2) list๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ํ›„ 0๋ฒˆ์งธ ๊ฐ’๊ณผ ๋ฐฉ๊ธˆ ์ถ”๊ฐ€ํ•œ ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

3) ์ผ์น˜ํ•˜๋ฉด ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ ๊ณ„์†ํ•ด์„œ ๋ฐ˜๋ณตํ•œ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์ด ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ idx๋ฅผ ํ˜„์žฌ ์œ„์น˜๋กœ ์ €์žฅํ•œ๋‹ค. list์— ์žˆ๋Š” ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„ num์— ์ €์žฅํ•œ ํ›„ ์ข…๋ฃŒํ•œ๋‹ค.

 

๋งŒ์•ฝ idx ๊ฐ’์ด -1์ด๋ฉด ๋‹ค์Œ์ˆ˜๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ "BIGGEEST"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. idx ๊ฐ’์ด ์žˆ๋‹ค๋ฉด result๋ฅผ A์˜ 0๋ถ€ํ„ฐ idx์ „๊นŒ์ง€ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ๊ทธ๋‹ค์Œ ๋ฐ”๊ฟ€ ๊ฐ’์ธ num์„ ์ถ”๊ฐ€ํ•œ๋‹ค. list๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ํ›„ num ๊ฐ’์„ ์ œ์™ธํ•œ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•œ๋‹ค. ์ตœ์ข… A์˜ ๋‹ค์Œ์ˆ˜์ธ result๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.