๋ฐฑ์ค ๋ฌธ์ ๋ชจ์
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2164
2164๋ฒ: ์นด๋2
N์ฅ์ ์นด๋๊ฐ ์๋ค. ๊ฐ๊ฐ์ ์นด๋๋ ์ฐจ๋ก๋ก 1๋ถํฐ N๊น์ง์ ๋ฒํธ๊ฐ ๋ถ์ด ์์ผ๋ฉฐ, 1๋ฒ ์นด๋๊ฐ ์ ์ผ ์์, N๋ฒ ์นด๋๊ฐ ์ ์ผ ์๋์ธ ์ํ๋ก ์์๋๋ก ์นด๋๊ฐ ๋์ฌ ์๋ค. ์ด์ ๋ค์๊ณผ ๊ฐ์ ๋์์ ์นด๋๊ฐ
www.acmicpc.net
๋ฌธ์
N์ฅ์ ์นด๋๊ฐ ์๋ค. ๊ฐ๊ฐ์ ์นด๋๋ ์ฐจ๋ก๋ก 1๋ถํฐ N๊น์ง์ ๋ฒํธ๊ฐ ๋ถ์ด ์์ผ๋ฉฐ, 1๋ฒ ์นด๋๊ฐ ์ ์ผ ์์, N๋ฒ ์นด๋๊ฐ ์ ์ผ ์๋์ธ ์ํ๋ก ์์๋๋ก ์นด๋๊ฐ ๋์ฌ ์๋ค.
์ด์ ๋ค์๊ณผ ๊ฐ์ ๋์์ ์นด๋๊ฐ ํ ์ฅ ๋จ์ ๋๊น์ง ๋ฐ๋ณตํ๊ฒ ๋๋ค. ์ฐ์ , ์ ์ผ ์์ ์๋ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ฒ๋ฆฐ๋ค. ๊ทธ๋ค์, ์ ์ผ ์์ ์๋ ์นด๋๋ฅผ ์ ์ผ ์๋์ ์๋ ์นด๋ ๋ฐ์ผ๋ก ์ฎ๊ธด๋ค.
์๋ฅผ ๋ค์ด N=4์ธ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณด์. ์นด๋๋ ์ ์ผ ์์์๋ถํฐ 1234์ ์์๋ก ๋์ฌ์๋ค. 1์ ๋ฒ๋ฆฌ๋ฉด 234๊ฐ ๋จ๋๋ค. ์ฌ๊ธฐ์ 2๋ฅผ ์ ์ผ ์๋๋ก ์ฎ๊ธฐ๋ฉด 342๊ฐ ๋๋ค. 3์ ๋ฒ๋ฆฌ๋ฉด 42๊ฐ ๋๊ณ , 4๋ฅผ ๋ฐ์ผ๋ก ์ฎ๊ธฐ๋ฉด 24๊ฐ ๋๋ค. ๋ง์ง๋ง์ผ๋ก 2๋ฅผ ๋ฒ๋ฆฌ๊ณ ๋๋ฉด, ๋จ๋ ์นด๋๋ 4๊ฐ ๋๋ค.
N์ด ์ฃผ์ด์ก์ ๋, ์ ์ผ ๋ง์ง๋ง์ ๋จ๊ฒ ๋๋ ์นด๋๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋จ๊ฒ ๋๋ ์นด๋์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ
- ์๋ฃ ๊ตฌ์กฐ
- ํ
๋ฌธ์ ํ์ด
- n์ ์ ๋ ฅ๋ฐ์ ํ, 1๋ถํฐ n๊น์ง๋ฅผ ๋ฐฐ์ด ์์๋ก ๊ฐ๋ ์ ์ํ ๋ฐฐ์ด queue๋ฅผ ์์ฑํ๋ค.
- n์ด 1์ธ ๊ฒฝ์ฐ๋ 1์ print ํ๋ค.
- ๋๋จธ์ง ๊ฒฝ์ฐ์๋ while ๋ฌธ์ ์คํํ๋ค
- tmp๋ณ์๋ฅผ 0๋ถํฐ 2์ฉ ์ฆ๊ฐ์ํจ๋ค.
- queue์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ์๋๋ผ 0์ผ๋ก ์ ์ฅํ๋ค. (์๊ฐ์ด๊ณผ ๋ฌธ์ ํด๊ฒฐ)
- ์ดํ queue์ queue์ tmp+1 ๋ฒ์งธ ์์๋ฅผ ์ถ๊ฐํ๊ณ , queue์ tmp+1 ๋ฒ์งธ ์์๋ฅผ 0์ผ๋ก ์ ์ฅํ๋ค.
- ๋ง์ฝ queue.count-2๊ฐ 0์ด๋ผ๋ฉด queue์ ๋ง์ง๋ง ์์๋ฅผ ์ถ๋ ฅํ๊ณ ์ข
๋ฃํ๋ค.
- (queue.count-2) ๋ฒ์งธ ์์๊ฐ 0์ด๋ผ๋ฉด ์นด๋ 2๊ฐ๋ง ๋จ์ ๊ฒฝ์ฐ์ด๊ณ , ๋ค์์ ์์ ์์๋ฅผ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ์์๊ฐ ๊ฒฐ๊ณผ ๊ฐ์ด๋ค.
- ex - ์นด๋๊ฐ 342 ์ผ ๋, 3์ ๋ฒ๋ฆฌ๋ฉด queue๋ 042๊ฐ ๋๋ค. ์ดํ 4๋ฅผ ๋ค๋ก ์ฎ๊ธฐ๋ฉด 0024๊ฐ ๋๋ค. <(queue.count-2) ๋ฒ์งธ ์์๊ฐ 0>
- ๋ง์ง๋ง์ผ๋ก 2๋ฅผ ๋ฒ๋ฆฌ๋ฉด ๋จ๋ ์นด๋๋ 4๊ฐ ๋๋ค.
- (queue.count-2) ๋ฒ์งธ ์์๊ฐ 0์ด๋ผ๋ฉด ์นด๋ 2๊ฐ๋ง ๋จ์ ๊ฒฝ์ฐ์ด๊ณ , ๋ค์์ ์์ ์์๋ฅผ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ์์๊ฐ ๊ฒฐ๊ณผ ๊ฐ์ด๋ค.
์์ค์ฝ๋
var n = Int(readLine()!)!
var queue: [Int] = Array(1...n)
var tmp = 0
if n == 1 { print(1) }
else{
while true{
queue[tmp] = 0
queue.append(queue[tmp + 1])
queue[tmp + 1] = 0
if queue[queue.count - 2] == 0 { print(queue.last!); break }
tmp += 2
}
}
- 36ms ์์
๋ค๋ฅธ ์ฝ๋
let N = Int(readLine()!)!
var i = 1
while true {
if N >= i , N < i*2 {
break
}else{
i *= 2
}
}
let remain = N-i
if remain == 0 {
print(i)
}else {
print(2*remain)
}
- 8ms ์์
- ํ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ 2์ ์ ๊ณฑ์ ์ฌ์ฉํ์ฌ ์ฝ๋ ์์ฑ
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค 1935๋ฒ - ํ์ ํ๊ธฐ์2 (0) | 2023.03.23 |
---|---|
[Swift] ๋ฐฑ์ค 10866๋ฒ - ๋ฑ (0) | 2023.03.21 |
[Swift] ๋ฐฑ์ค 1158๋ฒ - ์์ธํธ์ค ๋ฌธ์ (0) | 2023.03.20 |
[Swift] ๋ฐฑ์ค 18258๋ฒ - ํ 2 (0) | 2023.03.20 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๋ฐํํ๋ฉด ์ ๋ฆฌ (0) | 2023.03.19 |