์นด๋2 (silver 4)
N์ฅ์ ์นด๋๊ฐ ์๋ค. ๊ฐ๊ฐ์ ์นด๋๋ ์ฐจ๋ก๋ก 1๋ถํฐ N๊น์ง์ ๋ฒํธ๊ฐ ๋ถ์ด ์์ผ๋ฉฐ, 1๋ฒ ์นด๋๊ฐ ์ ์ผ ์์, N๋ฒ ์นด๋๊ฐ ์ ์ผ ์๋์ธ ์ํ๋ก ์์๋๋ก ์นด๋๊ฐ ๋์ฌ ์๋ค.
์ด์ ๋ค์๊ณผ ๊ฐ์ ๋์์ ์นด๋๊ฐ ํ ์ฅ ๋จ์ ๋๊น์ง ๋ฐ๋ณตํ๊ฒ ๋๋ค. ์ฐ์ , ์ ์ผ ์์ ์๋ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ฒ๋ฆฐ๋ค. ๊ทธ ๋ค์, ์ ์ผ ์์ ์๋ ์นด๋๋ฅผ ์ ์ผ ์๋์ ์๋ ์นด๋ ๋ฐ์ผ๋ก ์ฎ๊ธด๋ค.
์๋ฅผ ๋ค์ด N=4์ธ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณด์. ์นด๋๋ ์ ์ผ ์์์๋ถํฐ 1234 ์ ์์๋ก ๋์ฌ์๋ค. 1์ ๋ฒ๋ฆฌ๋ฉด 234๊ฐ ๋จ๋๋ค. ์ฌ๊ธฐ์ 2๋ฅผ ์ ์ผ ์๋๋ก ์ฎ๊ธฐ๋ฉด 342๊ฐ ๋๋ค. 3์ ๋ฒ๋ฆฌ๋ฉด 42๊ฐ ๋๊ณ , 4๋ฅผ ๋ฐ์ผ๋ก ์ฎ๊ธฐ๋ฉด 24๊ฐ ๋๋ค. ๋ง์ง๋ง์ผ๋ก 2๋ฅผ ๋ฒ๋ฆฌ๊ณ ๋๋ฉด, ๋จ๋ ์นด๋๋ 4๊ฐ ๋๋ค.
N์ด ์ฃผ์ด์ก์ ๋, ์ ์ผ ๋ง์ง๋ง์ ๋จ๊ฒ ๋๋ ์นด๋๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋จ๊ฒ ๋๋ ์นด๋์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
6
์์ ์ถ๋ ฅ 1
4

#include <stdio.h>
int main(){
int size;
int card[500000] = {}; // ํ
int front = 0, rear;
scanf("%d", &size);
for (int i = 0; i < size; i++){
card[i] = i + 1;
}
rear = size - 1; // rear์๋ ํ์ ๋ง์ง๋ง ์์์ ์ธ๋ฑ์ค ์ ์ฅ
while (front != rear) { // front์ rear๊ฐ ๋ค๋ฅธ ๊ฐ์ผ ๋ ๋ฐ๋ณต
front = (front + 1) % size; // front๋ ๋งจ ์ ์์ ๋ฐ๋ก ์ ์ธ๋ฑ์ค ์ ์ฅ
if (rear == front) break; // ์์๊ฐ ํ๋๋ง ๋จ์ผ๋ฉด breakํ๊ณ ์ถ๋ ฅ
rear = (rear + 1) % size;
card[rear] = card[front]; // ๊ฐ์ฅ ์์ ์ธ๋ฑ์ค์ ์๋ ์์ ๋งจ ๋ค๋ก ์ด๋
front = (front + 1) % size;
}
printf("%d\n", card[rear]); // ์ธ๋ฑ์ค front๋ก ํด๋ ์๊ด์์
return 0;
}
ํ์ ํน์ง์ ์ฌ์ฉํด์ ์์ฑํด์ฃผ์๋ค.
์นด๋์ ๊ฐ์์ ํด๋นํ๋ size๋ฅผ ์ ๋ ฅ๋ฐ๊ณ size์ ํด๋นํ๋ ๋งํผ ํด๋น ์ธ๋ฑ์ค์ ์ธ๋ฑ์ค + 1๋งํผ์ ๊ฐ์ ์ ์ฅํด์ฃผ์๋ค.
while๋ฌธ์ ์ฌ์ฉํด์ ํญ์ ์ฐธ์ผ ๋ front์๋ ๋งจ ์ ์์์ ๋ฐ๋ก ์์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํด์ฃผ๊ณ rear์๋ ํ์ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํด์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์์ ์ธ๋ฑ์ค์ ์๋ ์์๋ฅผ ๋งจ ๋ค๋ก ์์ง์ด๊ฒ ํ๊ณ ์ด ๊ณผ์ ์ rear๊ณผ front๊ฐ ๊ฐ์ง ์์ ๋์ ๋ฐ๋ณตํ๋ค.
rear๊ณผ front๊ฐ ๊ฐ๋ค๋ฉด while๋ฌธ์ ๋น ์ ธ๋์ค๊ณ ํด๋น ์ธ๋ฑ์ค์ ์์๊ฐ์ ์ถ๋ ฅํ๋๋ก ํด์ฃผ์๋ค.

'๋ฐฑ์ค > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [C] ๋ฐฑ์ค 10828๋ฒ (0) | 2022.11.11 |
|---|---|
| [C] ๋ฐฑ์ค 1065๋ฒ (0) | 2022.11.11 |
| [C] ๋ฐฑ์ค_ 7568๋ฒ (0) | 2022.05.16 |
| [C] ๋ฐฑ์ค_1929๋ฒ (0) | 2022.05.15 |
| [C] ๋ฐฑ์ค_1676๋ฒ (0) | 2022.05.08 |