Hello Ocean! ๐ŸŒผ

[๋ฐฑ์ค€/C++] 13701. ์ค‘๋ณต ์ œ๊ฑฐ ๋ณธ๋ฌธ

Algorithm

[๋ฐฑ์ค€/C++] 13701. ์ค‘๋ณต ์ œ๊ฑฐ

bba_dda 2021. 8. 3. 15:29
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

 

13701๋ฒˆ: ์ค‘๋ณต ์ œ๊ฑฐ

๋ฌธ์ œ: N๊ฐœ์˜ ์ •์ˆ˜ A1, A2, ..., AN ์„ ์ฝ๊ณ , ์ด๋“ค ์ค‘์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚จ์€ N'๊ฐœ์˜ ์ˆ˜ B1, B2, ..., BN’ ์„ ์ž…๋ ฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ์ด๋•Œ, 0 ≤ Ai < 225 = 33554432, i=1,2,…,N. ์ž…๋ ฅ์˜ ๊ฐœ์ˆ˜ N์€ 1

www.acmicpc.net

N๊ฐœ์˜ ์ •์ˆ˜ A1, A2, ..., AN ์„ ์ฝ๊ณ , ์ด๋“ค ์ค‘์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚จ์€ N'๊ฐœ์˜ ์ˆ˜ B1, B2, ..., BN’ ์„ ์ž…๋ ฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ์ด๋•Œ,

  1. 0  Ai < 2^25 = 33554432, i=1,2,…,N.
  2. ์ž…๋ ฅ์˜ ๊ฐœ์ˆ˜ N์€ 1 ์ด์ƒ 500๋งŒ ์ดํ•˜์ด๋‹ค.

ํ’€์ด

์ˆซ์ž๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅ๋ฐ›์•„์„œ, ์ด์ „์— ๋“ค์–ด์˜จ์ ์ด ์—†๋Š” ์ˆซ์ž๋ฉด ์ถœ๋ ฅํ•˜๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•ด๋ณด์ด๋Š” ๋ฌธ์ œ์˜€์ง€๋งŒ, 

๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์ด์—ˆ๋‹ค. 

์ˆซ์ž์˜ ๋ฒ”์œ„๊ฐ€ 2^25๊นŒ์ง€์˜€๊ธฐ ๋•Œ๋ฌธ์—, ์ค‘๋ณต์ฒดํฌํ•˜๋Š” ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ 1<<2^25๋กœ ์žก์œผ๋ฉด ์ด ๋ฌธ์ œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ธ 8MB๋ฅผ ๋„˜์–ด๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

๋”ฐ๋ผ์„œ, ๋น„ํŠธ ๋งˆ์Šคํฌ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ํ’€์ด๋Š” ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ๋“ค์„ ์ฐธ๊ณ ํ–ˆ๋‹ค! ๋‹ค๋“ค ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ํ’€์ด๋ฅผ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

 

int๊ฐ€ 32๋น„ํŠธ๋ผ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค. 

๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ (1<<2^25) / 32๋กœ ์ •ํ•˜๊ณ , ์ž…๋ ฅ๋œ ์ˆซ์ž A์— ๋Œ€ํ•ด 

A/32 : ์ธ๋ฑ์Šค, 1<<(A%32) : ๊ฐ’ ์œผ๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

์ฒ˜์Œ์—” ์ด๊ฒŒ ๋ฌด์Šจ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๋˜์—ˆ์œผ๋‚˜ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ณด๋ฉด์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๋ฐฐ์—ด ํ•œ ์นธ์€ int์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  int๋Š” 32๊ฐœ์˜ ๋น„ํŠธ๋กœ ํ‘œํ˜„๋œ๋‹ค. 

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

์ฝ”๋“œ

#include <iostream>

using namespace std;

int check[(1 << 25)/32];
int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int input;
	while (cin>>input){
		int idx = input / 32;
		int val = 1 << (input % 32);
		if (!(check[idx]&val)) {
			check[idx] += val;
			cout << input << " ";
		}
	}
	return 0;
}

๊ฒฐ๊ณผ

์–ผ๋งˆ์ „๋ถ€ํ„ฐ cin,cout ๋Œ€์‹ ์— scanf, printf๋กœ ์ž…์ถœ๋ ฅ์„ ๋Œ€์‹ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, 

์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” cin,cout์ด ์‹œ๊ฐ„์ด ๋” ์ ๊ฒŒ ๊ฑธ๋ ธ๋‹ค. ์™œ์ง€..? 

(๋งจ ์•„๋ž˜ : scanf,printf์ด์šฉ, ์œ„์— ๋‘๊ฐœ : cin,cout์ด์šฉ)

 

 

๋ฐ˜์‘ํ˜•