๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1985_๋””์ง€ํ„ธ ์นœ๊ตฌ

๋ฟŒ์•ผ._. 2024. 7. 1. 16:58

Silver IV

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

< ๋””์ง€ํ„ธ ์นœ๊ตฌ >

 

๋ฌธ์ œ ํ’€์ด 

 

x๋ฅผ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ณ ์นœ ํ›„ y์™€ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด y๋ฅผ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ณ ์นœ ํ›„ x์™€ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. 

 

 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.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class _1985_ { // ๋””์ง€ํ„ธ ์นœ๊ตฌ
	static Set<Integer> set1, set2;

	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;

		for (int i = 0; i < 3; i++) {
			st = new StringTokenizer(bf.readLine());

			String x = st.nextToken();
			String y = st.nextToken();

			set1 = new HashSet<>();
			set2 = new HashSet<>();

			for (int j = 0; j < x.length(); j++) {
				set1.add(x.charAt(j) - '0');
			}
			for (int j = 0; j < y.length(); j++) {
				set2.add(y.charAt(j) - '0');
			}

			boolean flag = false;
			for (int num : set1) {
				if (set1.size() != set2.size() || !set2.contains(num)) {
					flag = true;
					break;
				}
			}
			if (!flag) {
				bw.write("friends\n");
			} else {
				if (change(x, true) || change(y, false)) {
					bw.write("almost friends\n");
				} else {
					bw.write("nothing\n");
				}
			}
		}
		bw.flush();
	}

	private static boolean change(String num, boolean flag) {
		char arr[] = num.toCharArray();
		for (int i = 0; i < num.length() - 1; i++) { // + -
			Set<Integer> answer = new HashSet<>();

			if (arr[i] - '0' + 1 > 9 || arr[i + 1] - '0' - 1 < 0) {
				continue;
			}
			answer.add(arr[i] - '0' + 1);
			answer.add(arr[i + 1] - '0' - 1);

			for (int j = 0; j < num.length(); j++) {
				if (j == i || j == i + 1) {
					continue;
				}
				answer.add(arr[j] - '0');
			}
			boolean check = false;
			for (int x : answer) {
				if (flag) {
					if (answer.size() != set2.size() || !set2.contains(x)) {
						check = true;
						break;
					}
				} else {
					if (answer.size() != set1.size() || !set1.contains(x)) {
						check = true;
						break;
					}
				}
			}
			if (!check) {
				return true;
			}
		}

		for (int i = 0; i < num.length() - 1; i++) { // - +
			Set<Integer> answer = new HashSet<>();

			if (arr[i] - '0' - 1 < 0 || arr[i + 1] - '0' + 1 > 9 || (i == 0 && arr[i] - '0' - 1 == 0)) {
				continue;
			}
			answer.add(arr[i] - '0' - 1);
			answer.add(arr[i + 1] - '0' + 1);

			for (int j = 0; j < num.length(); j++) {
				if (j == i || j == i + 1) {
					continue;
				}
				answer.add(arr[j] - '0');
			}
			boolean check = false;
			for (int x : answer) {
				if (flag) {
					if (answer.size() != set2.size() || !set2.contains(x)) {
						check = true;
						break;
					}
				} else {
					if (answer.size() != set1.size() || !set1.contains(x)) {
						check = true;
						break;
					}
				}
			}
			if (!check) {
				return true;
			}
		}
		return false;
	}
}
๋ณ€์ˆ˜)
x, y : ๋‘ ์ •์ˆ˜ 
set1 , set2 : x์™€ y๊ฐ€ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ˆซ์ž ๊ตฌ์„ฑ 
flag : ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ˆซ์ž ๊ตฌ์„ฑ ์ผ์น˜ ์—ฌ๋ถ€
arr : ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž๋ฅผ char ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
answer : ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฐ”๊พผ ์ˆซ์ž๊ฐ€ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ˆซ์ž ๊ตฌ์„ฑ 
check : ๊ตฌ์„ฑ ์ผ์น˜ ์—ฌ๋ถ€

 

์ •์ˆ˜ x์™€ y๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๊ฐ x์™€ y๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ˆซ์ž๋ฅผ set1๊ณผ set2์— ์ €์žฅํ•œ๋‹ค. set1๊ณผ set2๋ฅผ ๋น„๊ตํ•ด์„œ ์ผ์น˜ํ•œ๋‹ค๋ฉด "friends"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด x์™€ y๋ฅผ ๊ทœ์น™์— ๋งž๊ฒŒ ๊ณ ์นœ ํ›„ ์ผ์น˜ํ•œ๋‹ค๋ฉด "almost friends"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด "nothing"์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

change(String num, boolean flag) 

num์„ char ๋ฐฐ์—ด๋กœ ๋ฐ”๊พผ๋‹ค. num์„ ์ˆœํ™˜ํ•˜๋ฉฐ i์— 1์„ ๋”ํ•˜๊ณ  i+1์— 1์„ ๋บ€๋‹ค. ์ด๋•Œ 0๋ณด๋‹ค ์ž‘๊ณ  9๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ˆซ์ž ๋ฒ”์œ„์— ๋ฒ—์–ด๋‚˜๋ฏ€๋กœ ์ข…๋ฃŒํ•œ๋‹ค. ๋ฐ”๊พผ ๊ฐ’์„ ๊ตฌ์„ฑํ•˜๋Š” ์ˆซ์ž๋ฅผ  answer์— ์ €์žฅํ•œ๋‹ค. x๋ฅผ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฐ”๊พผ ๊ฒƒ์ด๋ผ๋ฉด answer๊ณผ set2๋ฅผ ๋น„๊ตํ•œ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค. y๋ฅผ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฐ”๊พผ ๊ฒƒ์ด๋ผ๋ฉด answer๊ณผ set1์„ ๋น„๊ตํ•œ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ num์„ ์ˆœํ™˜ํ•˜๋ฉฐ i์— 1์„ ๋นผ๊ณ  i+1์— 1์„ ๋”ํ•œ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์œ„์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•œ๋‹ค.