๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 2751 ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ 2

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 15.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/2751

  • N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด ์ˆ˜๋Š” ์ ˆ๋Œ“๊ฐ’์ด 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค. ์ˆ˜๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ฒซ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • ์ ˆ๋Œ“๊ฐ’์ด 1,000,000์ธ ์ˆ˜๊นŒ์ง€ ์ด๋ฏ€๋กœ ๋ฐฐ์—ด์„ 2,000,001 ํฌ๊ธฐ๋กœ ๋งŒ๋“ค์–ด์„œ 0๋ถ€ํ„ฐ ๊ฐ’์„ ์ €์žฅํ–ˆ๋‹ค.
  • ์ค‘๋ณต๋œ ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ boolean์œผ๋กœ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์—ˆ๋‹ค.  
  • ๋Œ€์‹  ์ €์žฅํ•˜๋Š” ๊ฐ’์„ + 1,000,000์„ ํ•ด์„œ ๊ฐ’์„ ์ €์žฅํ–ˆ๋‹ค. 
    • ๋ฐ˜๋ณต๋ฌธ์ด 0๋ถ€ํ„ฐ์ด๋ฏ€๋กœ ๋“ค์–ด์˜จ ๊ฐ’์„ ์ด์šฉํ•ด arr[ (๋“ค์–ด์˜จ ๊ฐ’) + 1,000,000 ]์˜ ๊ฐ’์„ true๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  0๋ถ€ํ„ฐ 2,000,001๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ํ•ด๋‹น ๋ฐฐ์—ด ๊ฐ’์ด true์ด๋ฉด ํ•ด๋‹น i๊ฐ’์—์„œ 1,000,000์„ ๋นผ์ค€ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. 
  • ์ถœ๋ ฅํ•œ ๊ฐœ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋œ ๊ฐœ์ˆ˜์™€ ๊ฐ™์•„์ง€๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ์ฒ˜์Œ์— ์ ˆ๋Œ“๊ฐ’์ด๋ž€ ๋ง์„ ๋ชป๋ด์„œ ํฌ๊ธฐ๋ฅผ 1,000,001๋กœ ์žก์•„์„œ ๋ฐฐ์—ด ํฌ๊ธฐ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค...ใ…œใ…œ 

๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ.. ใ…œใ…œ
ใ…œใ…œใ…œ

์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class BOJ2751 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());

        // ์ค‘๋ณตํ•ด์„œ ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ boolean์œผ๋กœ ๊ด€๋ฆฌ
        // ์ ˆ๋Œ“๊ฐ’์ด 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜๋ผ๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ ํฌ๊ธฐ๋ฅผ 2,000,001๋กœ ์žก์Œ
        boolean arr[] = new boolean[2000001];

        // ์ž…๋ ฅ๋œ ์ˆ˜์— ํ•ด๋‹นํ•˜๋ฉด ๋ฐฐ์—ด๊ฐ’์„ true๋กœ ๋ณ€ํ™˜
        // -๋„ ํฌํ•จ์ด์ง€๋งŒ ๋ฐฐ์—ด์€ ๋ฌด์กฐ๊ฑด 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ 1,000,000์„ ๋”ํ•œ ๊ณณ์— ํ•ด๋‹น ๊ฐ’์„ ์ €์žฅํ•จ
        for(int i = 1; i <= N; i++){
            int n = Integer.parseInt(br.readLine());

            arr[n + 1000000] = true;
        }

        // ๋ช‡๊ฐœ๊ฐ€ ์ €์žฅ๋˜๋Š”์ง€ ์นด์šดํŠธ
        int cnt = 0;

        // 1๋ถ€ํ„ฐ 2000000๊นŒ์ง€ true์ธ ๊ฐ’์„ ์ €์žฅ
        // ์นด์šดํŠธ ๊ฐ’์ด ์ž…๋ ฅ๋œ ์ˆซ์ž์˜ ์ˆ˜์™€ ๊ฐ™๋‹ค๋ฉด ์ข…๋ฃŒ
        for(int i = 0; i < 2000001; i++){
            if(arr[i] == true){
                // '-'๊ฐ’์„ 0๋ถ€ํ„ฐ ์ €์žฅํ•˜๋Š๋ผ 1,000,000์”ฉ ๋”ํ•ด์„œ ์ €์žฅํ–ˆ์œผ๋ฏ€๋กœ
                // ์ง„์งœ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด 1,000,000์„ ๋นผ์คŒ
                sb.append((i - 1000000)+ "\n");
                cnt = cnt + 1;
            }

            if(cnt == N){
                break;
            }
        }

        System.out.println(sb);
    }
}