๐Ÿ“ ๊ฐœ๋ฐœ

[BOJ] 1138_ํ•œ ์ค„๋กœ ์„œ๊ธฐ


1138 ํ•œ ์ค„๋กœ ์„œ๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

๋ฌธ์ œ

N๋ช…์˜ ์‚ฌ๋žŒ๋“ค์€ ๋งค์ผ ์•„์นจ ํ•œ ์ค„๋กœ ์„ ๋‹ค. ์ด ์‚ฌ๋žŒ๋“ค์€ ์ž๋ฆฌ๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ์„œ์ง€ ๋ชปํ•˜๊ณ  ์˜ค๋ฏผ์‹์˜ ์ง€์‹œ๋Œ€๋กœ ์„ ๋‹ค. ์–ด๋А ๋‚  ์‚ฌ๋žŒ๋“ค์€ ์˜ค๋ฏผ์‹์ด ์‚ฌ๋žŒ๋“ค์ด ์ค„ ์„œ๋Š” ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•ด ๋†“๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„์นจ์— ์ž๊ธฐ๊ฐ€ ๊ธฐ๋กํ•ด ๋†“์€ ๊ฒƒ๊ณผ ์‚ฌ๋žŒ๋“ค์ด ์ค„์„ ์„  ์œ„์น˜๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์ž๊ธฐ๋ณด๋‹ค ํฐ ์‚ฌ๋žŒ์ด ์™ผ์ชฝ์— ๋ช‡ ๋ช… ์žˆ์—ˆ๋Š”์ง€๋งŒ์„ ๊ธฐ์–ตํ•œ๋‹ค. N๋ช…์˜ ์‚ฌ๋žŒ์ด ์žˆ๊ณ , ์‚ฌ๋žŒ๋“ค์˜ ํ‚ค๋Š” 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค. ๊ฐ ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ์–ตํ•˜๋Š” ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ค„์„ ์–ด๋–ป๊ฒŒ ์„œ์•ผ ํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์‚ฌ๋žŒ์˜ ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 10๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ํ‚ค๊ฐ€ 1์ธ ์‚ฌ๋žŒ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ž๊ธฐ๋ณด๋‹ค ํ‚ค๊ฐ€ ํฐ ์‚ฌ๋žŒ์ด ์™ผ์ชฝ์— ๋ช‡ ๋ช…์ด ์žˆ์—ˆ๋Š”์ง€ ์ฃผ์–ด์ง„๋‹ค. i๋ฒˆ์งธ ์ˆ˜๋Š” 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , N-i๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. i๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ค„์„ ์„  ์ˆœ์„œ๋Œ€๋กœ ํ‚ค๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ

๋ฒˆํ˜ธ์ž…๋ ฅ์ถœ๋ ฅ
14
2 1 0 0
4 2 1 3
25
0 0 0 0 0
1 2 3 4 5
36
5 4 3 2 1 0
6 5 4 3 2 1
47
6 1 1 1 2 0 0
6 2 3 4 7 5 1

๋ฌธ์ œ ํ’€์ด

๋‚˜์˜ ์ ‘๊ทผ ๋ฐฉ๋ฒ•

ํ‚ค์— ๋Œ€ํ•œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์„ฐ์„ ๋•Œ์˜ ๋‚ด ์œ„์น˜ + ๋‚˜๋ณด๋‹ค ํฐ ์‚ฌ๋žŒ์ด ์•ž์— ๋ช‡ ๋ช… ์žˆ๋Š”์ง€ ์œ„์น˜์— ์„ ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ๋’ค์— ๋‚˜๋ณด๋‹ค ์ž‘์€ ์‚ฌ๋žŒ์ด ์„ฐ๋‹ค๋ฉด ๋‚ด ๋’ค์— ์žˆ๋Š” ์ž‘์€์‚ฌ๋žŒ ์ˆ˜ ๋งŒํผ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์„ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์„œ๊ณ  ์žˆ๋Š” ๊ณผ์ •์—์„œ ์ž‘์€์‚ฌ๋žŒ์„ ๋งŒ๋‚œ๋‹ค๋ฉด ๊ทธ ์ˆ˜ ๋งŒํผ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์„ ๋‹ค. ์ด ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ฝ”๋“œ ์„ค๋ช…

for(let i = 0; i < n; i++) {
  let tempCnt = 0;
  for(let j = n-1; j >= i+list[i]-tempCnt; j--){
    tempCnt += result[j] ? 1:0;
  }
  result[i+list[i]-tempCnt] = i+1;
}

i for๋ฌธ์„ ๋Œ๋ฉด์„œ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ํƒ์ƒ‰ํ•œ๋‹ค. j for๋ฌธ์—์„œ๋Š” ๋ฐฐ์—ด์˜ ๋’ค์ชฝ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋ฉฐ tempCnt๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค. tempCnt์—๋Š” ๋‚ด ๋’ค์— ์žˆ๋Š” ๋‚˜๋ณด๋‹ค ์ž‘์€ ์‚ฌ๋žŒ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ ์ €์žฅํ•œ๋‹ค. j for๋ฌธ์˜ ๋ฒ”์œ„๋ฅผ j >= i+list[i]-tempCnt;ํ•œ ์ด์œ ๋Š” ๋‚˜๋ณด๋‹ค ์ž‘์€์‚ฌ๋žŒ์ด ๋‚ด๊ฐ€ ์„œ์•ผ ํ•  ์œ„์น˜ ๋’ค์— ์žˆ์–ด์„œ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์„œ๋Š” ๋„์ค‘์— ๋‚˜๋ณด๋‹ค ์ž‘์€ ์‚ฌ๋žŒ์„ ๋งŒ๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์œ„์—์„œ ๊ตฌํ•œ tempCnt๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ i+list[i]-tempCnt์œ„์น˜์— ์ค„์„ ์„ธ์šด๋‹ค.

๋ฌธ์ œ ํ›„๊ธฐ

์กฐ๊ธˆ๋งŒ ๊ณฐ๊ณฐํžˆ ์ƒ๊ฐํ•˜๋ฉด ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ธ๋ฐ ์„ฑ๊ธ‰ํ•˜๊ฒŒ ์˜ˆ์ œ ๋ผ์›Œ๋งž์ถ”๊ธฐ ์‹์œผ๋กœ ํ‘ธ๋‹ˆ๊นŒ ํ—ท๊ฐˆ๋ ธ๋‹ค. ๋ธ”๋กœ๊ทธ์— ํฌ์ŠคํŒ… ํ•˜๋ ค๊ณ  ์ฝ”๋“œ ์„ค๋ช…์„ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ฐจ๋ถ„ํžˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ด์ „ ๋‚ด ์ฝ”๋“œ์˜ ๊ฐœ์„ ์ ์ด ๋ณด์—ฌ์„œ ์กฐ๊ธˆ ์ˆ˜์ •ํ–ˆ๋‹ค. ๊ตฌํ˜„ ๋ฌธ์ œ๋Š” ๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๋ณด๋‹จ ๊ผผ๊ผผํ•˜๊ฒŒ ์ƒ๊ฐํ•œ ํ›„ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.

[BOJ] 1138_ํ•œ ์ค„๋กœ ์„œ๊ธฐ