SWLUG/๋ฐฑ์ค€ BEAKJOON

[C] ๋ฐฑ์ค€ BEAKJOON 2164๋ฒˆ: ์นด๋“œ2

waterproof 2023. 9. 27. 02:01

 

 

 

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

 

2164๋ฒˆ: ์นด๋“œ2

N์žฅ์˜ ์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นด๋“œ๋Š” ์ฐจ๋ก€๋กœ 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด ์žˆ์œผ๋ฉฐ, 1๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์œ„์—, N๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์•„๋ž˜์ธ ์ƒํƒœ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์นด๋“œ๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค. ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์นด๋“œ๊ฐ€

www.acmicpc.net

 


 

 

์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค... ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด๋ณด์•˜๋Š”๋ฐ,

์ง„์งœ ํ˜น์‹œ๋‚˜ํ•ด์„œ ์ œ์ถœํ–ˆ๋Š”๋ฐ ์—ญ์‹œ๋‚˜ ํ‹€๋ ธ๋‹ค.

 

 

๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์ •๋‹ต์„ ์•Œ์•„๋ณด์•˜๋‹ค.

(์ฐธ๊ณ : https://jootopia0808.tistory.com/111, https://blog.naver.com/kim-nan-hee/221901814483 )

 

 

 

 


[1] ์ •๋‹ต ์ฝ”๋“œ

 

#include <stdio.h>
#define size 500000
int main()
{
	int n, i, front=0, rear;
	int que[size];
	scanf("%d", &n);
	
	for(i=0; i<n; i++) que[i]=i+1;
	rear=n-1;
	
	while(1) {
		front=(front+1)%n;
		if(rear==front) break; // ํ™•์ธ
		rear=(rear+1)%n;
		que[rear]=que[front];
		front=(front+1)%n;
		if(rear==front) break; // ํ™•์ธ
	}
	printf("%d", que[rear]); // ์ถœ๋ ฅ
	return 0;
}

 

 

 

 


[2] ํ•ด์„

 

๋„์›€์„ ๋ฐ›์•˜๋‹ค... ์ •๋‹ต ์ฝ”๋“œ๋ฅผ ๋ด๋„ ์ดํ•ด๊ฐ€ ์•ˆ ๋๋‹ค. ๐Ÿฅฒ๐Ÿฅฒ๐Ÿฅฒ

 

 

1. int n, i, front=0, rear;: ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜ n, i, front, rear์„ ์„ ์–ธํ•œ๋‹ค. front๋Š” ํ˜„์žฌ ์นด๋“œ ๋ฑ์˜ ๋งจ ์•ž ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , rear๋Š” ํ˜„์žฌ ์นด๋“œ ๋ฑ์˜ ๋งจ ๋’ค ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.


2. int que[size];: ํฌ๊ธฐ๊ฐ€ size์ธ ์ •์ˆ˜ ๋ฐฐ์—ด que๋ฅผ ์„ ์–ธํ•œ๋‹ค. ์ด ๋ฐฐ์—ด์€ ์นด๋“œ๋ฅผ ๋‹ด์„ ๊ณต๊ฐ„์ด๋‹ค.


3. scanf("%d", &n);: ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„ n์— ์ €์žฅํ•œ๋‹ค.


4. for(i=0; i<n; i++) que[i]=i+1;: 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์€ ์นด๋“œ๋ฅผ que ๋ฐฐ์—ด์— ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.


5. rear=n-1;: rear ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์ฒ˜์Œ์—๋Š” ์นด๋“œ ๋ฑ์ด ๊ฝ‰ ์ฐจ์žˆ์œผ๋ฏ€๋กœ n-1๋กœ ์„ค์ •ํ•œ๋‹ค.


6. while(1) { ... }: ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.


7. front=(front+1)%n;: ํ˜„์žฌ ๋งจ ์•ž์˜ ์นด๋“œ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  front๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.


8. if(rear==front) break;: ๋งŒ์•ฝ rear์™€ front๊ฐ€ ๊ฐ™์•„์ง„๋‹ค๋ฉด ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ์ด๋Š” ๋งˆ์ง€๋ง‰ ์นด๋“œ๊ฐ€ ๋‚จ์•˜์„ ๋•Œ์˜ ์กฐ๊ฑด์ด๋‹ค.


9. rear=(rear+1)%n;: rear๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋งจ ๋’ค๋กœ ์˜ฎ๊ธด๋‹ค.


10. que[rear]=que[front];: ๋งจ ์•ž์˜ ์นด๋“œ๋ฅผ ๋งจ ๋’ค๋กœ ์˜ฎ๊ธด๋‹ค.

 

11. front=(front+1)%n;: ๋งจ ์•ž์˜ ์นด๋“œ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  front๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.


12. if(rear==front) break;: ๋งŒ์•ฝ rear์™€ front๊ฐ€ ๊ฐ™์•„์ง„๋‹ค๋ฉด ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

 

 

 


[3] ๋Š๋‚€ ์ 

 

 

 

์ด ์ •๋„ ๋ฌธ์ œ๋ฅผ ์Šค์Šค๋กœ ์ƒ๊ฐํ•ด์„œ ํ’€์–ด๋‚ด๋ ค๋ฉด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ• ๊นŒ...?

๊ทธ๋Ÿฐ ๋‚ ์ด ์™”์œผ๋ฉด ์ข‹๊ฒ ๋‹ค. ๊ทผ๋ฐ ํ‘ธ๋Š” ์‚ฌ๋žŒ์ด ์กด์žฌํ•˜๋‹ˆ๊นŒ ๋ฌธ์ œ๋„ ์žˆ๋Š” ๊ฑฐ๊ฒ ์ง€? ์—ด์‹ฌํžˆ ํ•ด์•ผ๊ฒ ๋‹ค.