2023. 10. 31. 14:29ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1236
-> ์ด์ ๋ฌธ์ ํ์ด
6. ๊ณต์ฃผ ๊ตฌํ๊ธฐ
์ค๋ช
์ ๋ณด ์๊ตญ์ ์ด์ ๋๋ผ ์ธ๋๋ธ ๊ณต์ฃผ๊ฐ ์ฒ์์ ๊ดด๋ฌผ์๊ฒ ์กํ๊ฐ์ต๋๋ค.
์ ๋ณด ์๊ตญ์๋ ์์๊ฐ N๋ช ์ด ์๋๋ฐ ์๋ก ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ๊ฒ ๋ค๊ณ ํฉ๋๋ค.
์ ๋ณด์๊ตญ์ ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ ์์๋ฅผ ๊ฒฐ์ ํ๊ธฐ๋ก ํ์ต๋๋ค.
์์ ์์๋ค์ ๋์ด ์์ผ๋ก 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ์ฐจ๋ก๋ก ๋ฒํธ๋ฅผ ๋งค๊ธด๋ค.
๊ทธ๋ฆฌ๊ณ 1๋ฒ ์์๋ถํฐ N๋ฒ ์์๊น์ง ์์๋๋ก ์๊ณ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ฉฐ ๋๊ทธ๋๊ฒ ์๊ฒ ํ๋ค.
๊ทธ๋ฆฌ๊ณ 1๋ฒ ์์๋ถํฐ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ฉฐ 1๋ถํฐ ์์ํ์ฌ ๋ฒํธ๋ฅผ ์ธ์น๊ฒ ํ๋ค.
ํ ์์๊ฐ K(ํน์ ์ซ์)๋ฅผ ์ธ์น๋ฉด ๊ทธ ์์๋ ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ๋๋ฐ์ ์ ์ธ๋๊ณ ์ ๋ฐ์ผ๋ก ๋์ค๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ์์๋ถํฐ ๋ค์ 1๋ถํฐ ์์ํ์ฌ ๋ฒํธ๋ฅผ ์ธ์น๋ค.
์ด๋ ๊ฒ ํด์ ๋ง์ง๋ง๊น์ง ๋จ์ ์์๊ฐ ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ด 8๋ช ์ ์์๊ฐ ์๊ณ , 3์ ์ธ์น ์์๊ฐ ์ ์ธ๋๋ค๊ณ ํ์. ์ฒ์์๋ 3๋ฒ ์์๊ฐ 3์ ์ธ์ณ ์ ์ธ๋๋ค.
์ด์ด 6, 1, 5, 2, 8, 4๋ฒ ์์๊ฐ ์ฐจ๋ก๋๋ก ์ ์ธ๋๊ณ ๋ง์ง๋ง๊น์ง ๋จ๊ฒ ๋ 7๋ฒ ์์์๊ฒ ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ๊ฐ๋๋ค.
N๊ณผ K๊ฐ ์ฃผ์ด์ง ๋ ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ ์์์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ์ค์ ์์ฐ์ N(5<=N<=1,000)๊ณผ K(2<=K<=9)๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ๋ง์ง๋ง ๋จ์ ์์์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์์ ์ ๋ ฅ 1
8 3
์์ ์ถ๋ ฅ 1
7
๋ฌธ์ ํ์ด 1
public int solution(int n, int k)
{
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= n; i++)
{
queue.add(i);
}
int cnt = 1;
while (queue.size() != 1)
{
if (cnt != k) {
Integer poll = queue.poll();
queue.offer(poll);
cnt++;
}else {
queue.poll();
cnt = 1;
}
}
return queue.element();
}
๐ฉ๐ป : ์ด ๋ฌธ์ ๋ Queue๋ฅผ ์ด์ฉํด์ ํธ๋ ๋ฌธ์ ์ด๋ค. Queue์ ์์ ๋ฒํธ 1 ~ n์ ๋ฃ์ด์ฃผ๊ณ , ๊ทธ ๋ค์ queue์ ์ฌ์ด์ฆ๊ฐ 1์ด ์๋ ๋๊น์ง while๋ฌธ์ผ๋ก ๋ฐ๋ณตํ๋ฉด์ k๋ฒ์งธ ๊ฐ์ queue์์ ๋นผ๋ด๊ณ , k๋ฒ์งธ ๊ฐ์ด ์๋ ๊ฒ๋ค์ ๋ค์ queue์ ์ง์ด๋ฃ๋๋ค.
์ด๋ ๊ฒ ํด์ ๋ฐ๋ณตํ๋ค๊ฐ queue์ ์ฌ์ด์ฆ๊ฐ 1์ด ๋๋ฉด ๋ง์ง๋ง ๋จ์ ์์์ด๋ฏ๋ก ์ด ์์์ ๊ฐ์ ๊บผ๋ด์ ๋ฆฌํดํด์ฃผ๋ฉด ๋๋ค.
cnt ๋ณ์๋ฅผ ํ๋ ๋ง๋ค์ด์ ์ด ๊ฐ์ด k๊ฐ ๋๋ฉด k ๋ฒ์งธ ์์๋ฅผ poll ํด์ฃผ๊ณ k ๊ฐ์ด ์๋ ๋๋ ๋ค์ queue์ offer ํด์ฃผ๋ฉด ๋๋ค.
(k๋ฒ์งธ๊ฐ ๋์์ ๋๋ ๋ค์ cnt ๊ฐ์ 1๋ก ์ด๊ธฐํํด์ฃผ๊ณ , k๋ฒ์งธ๊ฐ ์๋ ๋ cnt์ ๊ฐ์ 1 ์ฆ๊ฐ ์์ผ์คฌ๋ค.)
๋๋ queue์ ๊ฐ์ ๋ฃ๋ ๋ฉ์๋๋ฅผ ๋ชฐ๋ผ์..๊ทธ๋ฅ add() ์ offer() ๋ฉ์๋๊ฐ ์๊ธธ๋ ์ด๋ฅผ ํ์ฉํ๊ณ ,
queue์์ ๊ฐ์ ๊บผ๋ผ ๋๋ poll() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ๊บผ๋๋ค.
๋ฌธ์ ํ์ด 2
public int solution2(int n, int k)
{
int answer = 0;
Queue<Integer> queue2 = new LinkedList<>();
for (int i = 1; i <=n; i++)
{
queue2.offer(i);
}
while (!queue2.isEmpty())
{
for (int i = 1; i <k; i++)
{
queue2.offer(queue2.poll()); // poll() : ๊บผ๋ด๊ณ ๊ทธ ๊บผ๋ธ ๊ฐ์ ๋ฆฌํดํ๋ค.
}
queue2.poll();
if (queue2.size() == 1)
answer = queue2.poll();
}
return answer;
}
๐พ : ๊ฐ์ฌ๋๋ ๋์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ํ์๋๋ฐ ๊ฐ์ฌ๋์ ์ฐ์ queue์ offer ๋ฉ์๋๋ฅผ ํ์ฉํด์ queue์ ๊ฐ์ 1 ~ n๊น์ง ๊ฐ์ ์ถ๊ฐํด์คฌ๋ค.
๊ทธ ๋ค์ queue๊ฐ isEmpty ์ฆ, ๋น์ด์์ง ์์ ๊ฒฝ์ฐ์๋ง while๋ฌธ์ ๋๋๋ฐ, ์ด๋ for๋ฌธ์ ์ด์ฉํด์ 1๋ถํฐ k ๊ฐ ์ ๊น์ง๋ queue์์ ๊บผ๋ธ ๊ฐ์ ๋ค์ queue์ ๋ฃ์ด์คฌ๋ค. (k๊ฐ 3์ผ ๋๋ 1, 2 ๋๊ฐ์ ๊ฐ๋ง queue์์ ๊บผ๋ด์ queue์ ๋ค์ offer ํด์ค๋ค.)
for๋ฌธ์ ๋๊ณ ๋๋ฉด ๊ทธ๋๊ฐ k๋ฒ์งธ๋ผ๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ queue2์์ poll๋ก ๊ทธ ๊ฐ์ ๊บผ๋ด๊ณ , ์ด๋ ๊ฒ ๋ฐ๋ณตํ๋ค๊ฐ queue์ ์ฌ์ด์ฆ๊ฐ 1์ผ ๋, ์ด ๊ฐ์ ๊บผ๋ด์ answer์ ๋ฃ์ด์ฃผ๊ณ , ๊ทธ๋ฌ๋ฉด queue์ ์๋ฌด๊ฒ๋ ๋ค์ด์์ง ์๊ธฐ ๋๋ฌธ์ while๋ฌธ๋ ๋ฒ์ด๋๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ answer๋ฅผ ๋ฆฌํดํด์ฃผ๋ฉด ๋๋ค.