MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ

MUKER 2023. 8. 11. 15:19
๋ฌธ์ œ ๋งํฌ
 

1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ

์ฒซ์งธ ์ค„์— ํ์˜ ํฌ๊ธฐ N๊ณผ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , M์€ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ์œ„์น˜๊ฐ€

www.acmicpc.net


๋ฌธ์ œ

์ง€๋ฏผ์ด๋Š” N๊ฐœ์˜ ์›์†Œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์–‘๋ฐฉํ–ฅ ์ˆœํ™˜ ํ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์ด ํ์—์„œ ๋ช‡ ๊ฐœ์˜ ์›์†Œ๋ฅผ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•œ๋‹ค.

์ง€๋ฏผ์ด๋Š” ์ด ํ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ฝ‘์•„๋‚ธ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, ์›๋ž˜ ํ์˜ ์›์†Œ๊ฐ€ a1, ..., ak์ด์—ˆ๋˜ ๊ฒƒ์ด a2, ..., ak์™€ ๊ฐ™์ด ๋œ๋‹ค.
  2. ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, a1, ..., ak๊ฐ€ a2, ..., ak, a1์ด ๋œ๋‹ค.
  3. ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, a1, ..., ak๊ฐ€ ak, a1, ..., ak-1์ด ๋œ๋‹ค.

ํ์— ์ฒ˜์Œ์— ํฌํ•จ๋˜์–ด ์žˆ๋˜ ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๋ฏผ์ด๊ฐ€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์›์†Œ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (์ด ์œ„์น˜๋Š” ๊ฐ€์žฅ ์ฒ˜์Œ ํ์—์„œ์˜ ์œ„์น˜์ด๋‹ค.) ์ด๋•Œ, ๊ทธ ์›์†Œ๋ฅผ ์ฃผ์–ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ๋ฝ‘์•„๋‚ด๋Š”๋ฐ ๋“œ๋Š” 2๋ฒˆ, 3๋ฒˆ ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ์˜ ํฌ๊ธฐ N๊ณผ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , M์€ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ์œ„์น˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์œ„์น˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ


์„ฑ๊ณต ํ’€์ด

let I = readLine()!.split {$0==" "}.map {Int($0)!}, N = I[0]
let target = readLine()!.split {$0==" "}.map {Int($0)!}
var queue = Array(1...N)
var pointer = 0
var result = 0

for target in target {
	if pointer > queue.count-1 { pointer = 0 }
	if target == queue[pointer] {
		queue.remove(at: pointer)
		continue
	}
	var left = pointer
	var right = pointer
	var count = 0
	while true {
		left = left-1 < 0 ? queue.count-1 : left-1
		right = right+1 > queue.count-1 ? 0 : right+1
		count += 1
		if queue[left] == target {
			queue.remove(at: left)
			pointer = left
		} else if queue[right] == target {
			queue.remove(at: right)
			pointer = right
		} else {
			continue
		}
		result += count
		break
	}
}
print(result)

ํ’€์ด ํ‚ค์›Œ๋“œ

  • ํ˜„์žฌ index๊ฐ€ ์œ„์น˜ํ•˜๋Š” pointer๋ฅผ ๋‘์–ด pointer๋ฅผ ๊ธฐ์ค€์œผ๋กœ index์™ผ์ชฝ, index์˜ค๋ฅธ์ชฝ ์œผ๋กœ ํƒ์ƒ‰์„ ์‹ค์‹œํ•˜๋ฉฐ ๋‘ ๊ฐœ์˜ index์ค‘ ํ•˜๋‚˜๋ผ๋„ index์˜ ๊ฐ’๊ณผ target์ด ๊ฐ™๋‹ค๋ฉด result๊ฐ’์— ํƒ์ƒ‰๋œ ํšŸ์ˆ˜๋ฅผ ๋”ํ•ด์คฌ์Šต๋‹ˆ๋‹ค.
  • target๊ณผ ๊ฐ™์•˜๋˜ index๋ฅผ pointer์— ๋„ฃ๊ณ  ํ•ด๋‹น index๋Š” queue์—์„œ ์‚ญ์ œ์‹œ์ผœ์คฌ์Šต๋‹ˆ๋‹ค.