๋ฌธ์ œ

Problem

Result

https://www.acmicpc.net/problem/2164

ํ’€์ด ๊ณผ์ •

์ด ๋ฌธ์ œ์—์„œ ๋งํ•˜๋Š” ์นด๋“œ๋ฅผ ์„ž๊ณ  ๋ฒ„๋ฆฌ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ(Queue) ํ˜•ํƒœ์˜ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์ด๋ฏธ ํ์— ๋Œ€ํ•ด์„œ๋Š” ์˜ˆ์ „ ๋ฌธ์ œ์—์„œ ์„ค๋ช…ํ•˜์˜€์œผ๋‹ˆ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ .

<BOJ - [Array - 10845 ํ] - Silver IV๐Ÿฅˆ>

https://hoshi2710.github.io/๋ฐฑ์ค€/10845.html

์ด๋ฌธ์ œ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์ œ์ผ ์•ž ์นด๋“œ๋ฅผ ๋ฒ„๋ฆฐ๋‹ค.
  2. ๊ทธ๋‹ค์Œ์นด๋“œ๋ฅผ ์ œ์ผ ๋’ค๋กœ ๋ณด๋‚ธ๋‹ค.

์ด ์ž‘์—…์„ ๊ทธ๋Œ€๋กœ ํ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜์žˆ๋Š” ๋ฌธ์ œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ์ „์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์ ‘๊ทผ ํ–ˆ๊ธฐ์— ์กฐ๊ธˆ ๋‹ค๋ฅธ ํŒ๋‹จ์„ ํ–ˆ๋‹ค.

์ด ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์ž๋ฃŒ๋ฅผ ์ผ์ผํžˆ ์˜ฎ๊ธฐ๊ณ  ์ง€์šฐ๊ณ  ํ•˜๋Š” ์ž‘์—…์„ ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋ฉด ์‹œ๊ฐ„์ด ํ›จ์”ฌ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š์„๊นŒ?

์ง€๊ธˆ์™€์„œ ๋ณด๋ฉด ๋งŽ์ด ๋ถ€์กฑํ•œ ์ƒ๊ฐ์ด์—ˆ๋‹ค๋Š” ํŒ๋‹จ์ด ๋“ ๋‹ค. ์‹œ๊ฐ„์ œํ•œ์ด 2์ดˆ์ •๋„๋ฉด ๊ฝค๋‚˜ ๋„‰๋„‰ํ•˜๊ฒŒ ์ฃผ์–ด์ง„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์‚ฌ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ์š”

์ผ๋‹จ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. (์นด๋“œ ๊ฐฏ์ˆ˜ = n)

  1. n์„ 2๋กœ ๋‚˜๋ˆˆ๋‹ค. (์œ„ ์ž‘์—…์ค‘ ์นด๋“œ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ๋’ค๋กœ ๋ณด๋‚ด๋Š” ์ž‘์—… ๋Œ€์ฒด) ๊ทธ๋‹ค์Œ \(2^0\)์˜ ๊ฐ’์„ ๋ณ„๋„์˜ ๋ณ€์ˆ˜(์ดํ•˜ A๋ผ ์ง€์นญ) ์— ๋”ํ•˜๊ธฐ (\(2^0\)์—์„œ 0์€ ๋ฐ˜๋ณต์ž‘์—…์ด ์ด๋ฃจ์–ด์ง„ ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธ, 0๋ถ€ํ„ฐ ์‹œ์ž‘)
  2. ๋‚˜๋ˆ„๊ธฐ ์ „ ๊ฐ’์ด ํ™€์ˆ˜๋ผ๋ฉด ์ฒซ๋ฒˆ์งธ ์ž‘์—…์—์„œ ์นด๋“œ๋ฅผ ๋ฒ„๋ฆฌ๊ธฐ๊นŒ์ง€๋งŒ ํ•˜๊ณ  ๋’ค๋กœ ๋ณด๋‚ด๋Š” ์ž‘์—…์€ ์ˆ˜ํ–‰ ์•ˆํ•œ๊ฒƒ ์ด๋ฏ€๋กœ ๋‹ค์Œ ์ž‘์—…์—์„œ๋Š” ์ž‘์—…์„ ๊ฑฐ๊พธ๋กœ(์—ญ๋ฐฉํ–ฅ) ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ธฐ์–ต. ( ์ง์ˆ˜๋ฉด ๊ทธ๋Œ€๋กœ ์ž‘์—…)
  3. ์ด๋ฒˆ์—๋„ n์„ ๋‚˜๋ˆ„๋Š”๋ฐ ๋งŒ์•ฝ ์œ„์—์„œ ์ž‘์—…์„ ๊ฑฐ๊พธ๋กœ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ธฐ๋ก ๋˜์—ˆ๋‹ค๋ฉด 1๋ฒˆ์—์„œ ๋‚˜๋ˆˆ ๊ฐ’์— 1์„ ๋”ํ•˜๊ณ  ๋‹ค์‹œ 2๋กœ ๋‚˜๋ˆˆ๋‹ค. (์ •๋ฐฉํ–ฅ์ด๋ฉด 1๋ฒˆ๊ณผ ๋™์ผํ•œ ์ž‘์—… ์ง„ํ–‰)
  4. 2๋ฒˆ๊ณผ ๋™์ผํ•œ ์กฐ๊ฑด๊ธฐ์ค€์œผ๋กœ ์—ญ๋ฐฉํ–ฅ, ์ •๋ฐฉํ–ฅ์„ ํŒ๋‹จํ•˜๊ณ , ์—ฌ๊ธฐ์— ์ถ”๊ฐ€์กฐ๊ฑด์œผ๋กœ 3๋ฒˆ ์ž‘์—…์ด ์—ญ๋ฐฉํ–ฅ์ธ์ง€ ์ •๋ฐฉํ–ฅ์ธ์ง€ ํ™•์ธํ›„ ์•„๋ž˜ ์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœ(XOR ์—ฐ์‚ฐ)
2๋ฒˆ ๊ธฐ์ค€3๋ฒˆ ์ž‘์—… ๋ฐฉํ–ฅ๋‹ค์Œ ์ž‘์—… ๋ฐฉํ–ฅ
์ •๋ฐฉํ–ฅ์ •๋ฐฉํ–ฅ์ •๋ฐฉํ–ฅ
์ •๋ฐฉํ–ฅ์—ญ๋ฐฉํ–ฅ์—ญ๋ฐฉํ–ฅ
์—ญ๋ฐฉํ–ฅ์ •๋ฐฉํ–ฅ์—ญ๋ฐฉํ–ฅ
์—ญ๋ฐฉํ–ฅ์—ญ๋ฐฉํ–ฅ์ •๋ฐฉํ–ฅ
  1. 3๋ฒˆ๊ณผ 4๋ฒˆ์ž‘์—…์„ ๋‚˜๋ˆ„๋Š” ๊ฐ’์ด 1๋ณด๋‹ค ๊ฐ’์ด ํฐ ๋™์•ˆ ๊ณ„์† ๋ฐ˜๋ณตํ•œ๋‹ค.
  2. 1๋ฒˆ์—์„œ ์–ธ๊ธ‰ํ•œ ๋ณ„๋„์˜ ๋ณ€์ˆ˜ A๋ฅผ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

๋‹จ์ˆœ๊ธ€ ๋กœ๋งŒ ํ‘œํ˜„ํ•˜์ž๋‹ˆ ๋‚ด๊ฐ€ ์ ์—ˆ์ง€๋งŒ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋‚˜๋งˆ ์‰ฝ๊ฒŒ ์š”์•ฝํ•˜๋ฉด

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์œ„ ๋ฌธ์ œ๋ฅผ ์นด๋“œ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ์„ž๋Š” ์ž‘์—…์œผ๋กœ ์นด๋“œ๊ฐ€ ํ•œ๋ฐ”ํ€ด ์ˆœํ™˜ํ–ˆ์„๋•Œ๋ฅผ ํ•œ ๋‹จ์œ„๋กœ ์žก์•„ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

details

๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๋˜๊ณ  ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main
{
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int n = Integer.parseInt(br.readLine()),gap = 1,result = 1;
		boolean reverse = false;
		for(int count=n; count > 1; gap*=2) {
		  int beforeCount = count;
		  if(!reverse) {
		      count /= 2;
		      result += gap;
		  }
		  else {
		      count = (count+1)/2;
		  }
		  reverse ^= (beforeCount%2 == 1);
		}
		bw.write(Integer.toString(result)+"\n");
		bw.flush();
		bw.close();
	}
}

ํ(Queue)๋ฅผ ์ด์šฉํ•œ ํ’€์ด๋ฐฉ๋ฒ• ๊ณผ์˜ ๋น„๊ต

ํ์„ ํ™œ์šฉํ•ด์„œ ํ’€์—ˆ์„๋•Œ ๋จผ์ € N๊ฐœ์˜ ์นด๋“œ๋ฅผ ๋ชจ๋‘ ๋ฒ„๋ฆฌ๊ณ  ๋’ค๋กœ๋„˜๊ธฐ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ๋Œ€๋žต N/2๊ฐœ์˜ ์นด๋“œ๋ฅผ ๋™์ผํ•œ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋ฐ˜๋ฉด ๋‚ด๊ฐ€ ์ง„ํ–‰ํ•œ ์ผ์ข…์˜ ๋ถ„ํ•  ์ •๋ณต๋ฒ•์œผ๋กœ ํ–ˆ์„๋•Œ ์นด๋“œ์— ํ•ด๋‹นํ•˜๋Š” ์ž๋ฃŒ๋ฅผ ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  ํ ์ ‘๊ทผ๋ฒ•์—์„œ N,N/2,N/4 โ€ฆ ์”ฉ์œผ๋กœ ์นด๋“œ์˜ ๊ฐฏ์ˆ˜๋งŒ ๊ณ„์‚ฐํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋‘ ๋ฐฉ๋ฒ•์„ ๊ฐ๊ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์„๋•Œ ๋Œ€๋žต์ ์ธ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ ํ™œ์šฉ : \(O(n \times log(n))\)
  • ๋ถ„ํ• ๋ฒ• ํ™œ์šฉ : \(O(log(n))\)

๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ œ๊ฐ€ ์˜๋„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘ผ๊ฒƒ์€ ์•„๋‹ˆ๊ธด ํ•˜๋‚˜, ํšจ์œจ ์ธก๋ฉด์—์„œ๋งŒ ๋ดค์„๋•Œ๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋” ํšจ์œจ์ ์ด์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.