๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 27172_์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„

๋ฟŒ์•ผ._. 2024. 3. 25. 14:00

Gold V

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

< ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„ >

 

๋ฌธ์ œ ํ’€์ด 

 

๊ฐ ์นด๋“œ์˜ ๊ฐ’์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์นด๋“œ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

* ๋ฌธ์ œ์— ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜๋ฅผ ๋จผ์ € ํ™•์ธํ–ˆ์—ˆ๋Š”๋ฐ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๊ฐ€ ์ ํ˜€์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹จ์ˆœํžˆ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๊ณ  ์นด๋“œ ๋‘ ๊ฐœ์˜ ๊ฐ’์ด ๋‹ค ์†Œ์ˆ˜๋ผ๋ฉด ๋ฌด์Šน๋ถ€์ธ ๊ฒƒ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ธ ์ค„ ์•Œ์•˜๋‹ค. ์ง์ ‘ ๊ฐ’์„ ๋‚˜๋ˆ ์„œ ํŒ๋‹จํ•  ๊ฒฝ์šฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•„ ์ฐพ์•„๋ณด๋‹ˆ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐฉ์‹์ฒ˜๋Ÿผ ๊ฐ’์˜ ๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

 

 

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

public class _27172_ { // ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„

	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;

		int n = Integer.parseInt(bf.readLine());

		int card[] = new int[n];
		int result[] = new int[1000001];
		boolean arr[] = new boolean[1000001];
		int max = 0;

		st = new StringTokenizer(bf.readLine());
		for (int i = 0; i < n; i++) {
			card[i] = Integer.parseInt(st.nextToken());
			arr[card[i]] = true;
			max = Math.max(card[i], max);
		}

		for (int i = 0; i < n; i++) {
			for (int j = card[i] + card[i]; j <= max; j += card[i]) {
				if (arr[j]) {
					result[card[i]] += 1;
					result[j] -= 1;
				}
			}
		}

		for (int i = 0; i < n; i++) {
			bw.write(result[card[i]] + " ");
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
n : ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜
card : ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์นด๋“œ์— ์ ํžŒ ์ˆ˜
result : ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜
arr : ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์นด๋“œ ์—ฌ๋ถ€
max : ์นด๋“œ์˜ ์ตœ๋Œ“๊ฐ’

 

ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๊ฐ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์นด๋“œ์— ์ ํžŒ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ card ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค. ์นด๋“œ์— ์ ํžŒ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด์„œ ์ด ์นด๋“œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด arr ๊ฐ’์„ true๋กœ ์ €์žฅํ•œ๋‹ค. ์นด๋“œ ๊ฐ’ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

 

๊ฐ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์นด๋“œ๋ฅผ ์ˆœํ™˜ํ•˜๋ฉด์„œ ๊ทธ ๊ฐ’์˜ ๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ๊ฐ’์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์นด๋“œ ๊ฐ’์ด๋ผ๋ฉด ์ž์‹ ์€ 1์ ์„ ํš๋“ํ•˜๊ณ  ์ƒ๋Œ€๋ฐฉ์€ 1์ ์„ ์žƒ๋Š”๋‹ค.

 

์ตœ์ข… ๊ฐ ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.