๐ ๋ฌธ์ ํบ์๋ณด๊ธฐ
https://www.acmicpc.net/problem/1019
1,000,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ N์ด ์ฃผ์ด์ง ๋
1 ~ N๊น์ง์ ํ์ด์ง ๋ฒํธ์์ 0~9๊ฐ ๋ช ๋ฒ ๋์ค๋์ง ๊ตฌํด๋ณด์
๋ฐฑ์ค์์๋ 1์ด๋น 1์ต์ ๋์ด๊ฐ๋ฉด ์๊ฐ์ด๊ณผ๋ฅผ ํ๊ฒ ๋ฉ๋๋ค
ํ์ง๋ง ๋ฌธ์ ๋ 10์ต์ด๊ธฐ์ ๋น์ฐํ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฒดํฌํ๋ ๋ฐฉ๋ฒ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค.
๐๊ท์น ์ฐพ๊ธฐ
์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํจ์ ๊ณง ๊ท์น์ด ์๊ณ ์ด๊ฑฐ๋ฅผ ์ฐพ์ผ๋ฉด ํด๊ฒฐํ ์ ์๋ค๋ ์๋ฏธ์ฃ
์ 10์ต ์๋ฆฌ์ ์๋ฅผ ๋ฌด์ธ๊ฐ ํ๋ ค๋ฉด ์๋ก ์ ๊ทผํ๋ ๊ฒ ์๋ ๋ฌธ์์ด๋ก ์ ๊ทผํด์ผ ํฉ๋๋ค
๋ค๊ฐ๊ฐ๊ธฐ 1
์ผ๋จ 1๋ถํฐ 99๋ ๊ตฌํ ์ ์์๊น?
๐ก์ด๋ ๋ณด์ ์ญ์ ์๋ฆฌ๋ง ๋๊ณ ์๊ฐํ๋ฉด 1~9๊ฐ 10๋ฒ ๋ฐ๋ณต๋๊ณ (๊ฐ ์ญ์ ์๋ฆฟ์๋ ์ผ์๋ฆฌ๊ฐ 9๊น์ง ๋๊ธฐ ๋๋ฌธ์)
์ผ์ ์๋ฆฌ๋ 1๋ถํฐ ์์ํ๋๊น 0์ 9๋ฒ ๋๋จธ์ง๊ฐ 10๋ฒ ๋ฐ๋ณต๋๋ค
๋ค๊ฐ๊ฐ๊ธฐ 2
1 ~ 99๋ ์ฌ์ด๋ฐ ๊ทธ๋ฌ๋ฉด 1 ~ 56์? ์ค๊ฐ๊น์ง๋ ์ด๋ป๊ฒ ๊ตฌํ์ง?
๐ก ์ด๋ฒ์ ์ญ์ ์๋ฆฌ๋ ์ต๋ ์ซ์๋ฅผ 99๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ฐํ๋ฉด ์ญ์์๋ฆฌ๋ผ๋ฆฌ์ ์ฐจ์ธ 9 - 5 +1 = 5๋งํผ์ 10๋ฒ์ฉ ๋ฐ๋ณต๋์ง๋ง
5์ ๊ฒฝ์ฐ 6๊น์ง๋ง ๋ฐ๋ณต๋๋ค ๊ทธ๋ฌ๋ฉด 9-6์ ํ 3์ ๋นผ์ผ์ง ๋ฐ๋ณต๋๋ ๊ฐ์ด ๋์ค๊ฒ ์ด
์ผ์ ์๋ฆฌ๋ 50/10์ผ๋ก ์ญ์ ์๋ฆฟ์๋ฅผ 10์ผ๋ก ๋๋ ํ + 1์ ํ ๊ฐ๋งํผ 0~9๊ฐ ๋ฐ๋ณต๋๋ค
ํ์ง๋ง 0์ 1๋ถํฐ ์์ํ๋ ์กฐ๊ฑด ๋๋ฌธ์ 1์ ๋นผ๊ณ 7,8,9๋ ์ผ์ ์๋ฆฟ ์๊ฐ 6์ด๋ ํ๋์ฉ ๋ฐ๋ณต๋๋ ํ์๋ฅผ ์ค์ฌ์ผ๊ฒ ๋ค
๋ค๊ฐ๊ฐ๊ธฐ 3
์ญ์ ์๋ฆฌ๊น์ง ๊ตฌํ๋ค๋ฉด ์ด๋ฅผ ๋ฐฑ์ ์๋ฆฌ ์ด์์ ์๋ ์ปค๋ฒํ ์ ์๊ฒ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋งจ ์ผ์ชฝ ์๋ฅผ ์ ๊ฑฐํ๊ณ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ญ์ ์๋ฆฟ์ ํ๋ก์ธ์ค๋ฅผ ๋ฐ๋ณตํ๋ ๊ฑฐ์ฃ
๋์ ์๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด์ผ ํฉ๋๋ค.
- ๊ฐ์ฅ ์ผ์ชฝ ์ ๊ฐ์ด 9์ ๋น๊ตํ์ ๋ ์ฐจ๊ฐ๋๋ ๋ก์ง์ ์ญ์ ์๋ฆฟ์ ์ด์์๋ ์ ์ฉํด์ผ ํฉ๋๋ค
- ๊ฐ์ฅ ์ผ์ชฝ ์๋ฅผ ๋ฒ๋ฆฌ๋ฉด์ ์๋ฆฟ์๋งํผ์ ๊ณฑ์ ์ ํด์ค ๋ก์ง์ด ํ์ํฉ๋๋ค.
์ด๋ฅผ ๋ง์กฑํ๊ธฐ ์ํด์ ์๋ ํ๋ก์ธ์ค๋๋ก ์งํํฉ๋๋ค
- ์ซ์์ ๊ธธ์ด๋งํผ ๋ฐ๋ณตํ๋ ๋ฐ๋ณต๋ฌธ ์์์
- ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ฅผ ์ผ์ ์๋ฆฌ๋ก ๊ฐ์ ํ๊ณ ์ด๋ฅผ 9๋ก ๋ง๋ ํ ์ด์ ๋ํ ์ฐจ๋ฅผ ๊ตฌํฉ๋๋ค
- ์ผ๋จ ์ผ์ ์๋ฆฟ ์๊ฐ ์ต๋๋ก ๋์ค๋ ์๋ฅผ ์ ํฉ๋๋ค (ex : 543์ด๋ฉด 54+1๋ก ์ ์ฅํ๊ธฐ)
- ์ผ์ ์๋ฆฟ์๊ฐ 2๋ฒ์์ ๊ตฌํ ์ฐจ๋ณด๋ค ๋ ๋์จ ๊ฐ์ ์ ๊ฑฐํฉ๋๋ค
- ์ผ์ ์๋ฆฟ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ์์์๋ ์ถ๊ฐ๋ก ๋์จ ๊ฐ์ ์ ๊ฑฐํฉ๋๋ค
- 1๋ถํฐ ์์ํ๋ฏ๋ก 0์ ๋บ๋๋ค (์ญ์ ์๋ฆฟ์, ๋ฐฑ์ ์๋ฆฟ์๋ 0๋ถํฐ ์์ํ์ง ๋ชปํ๋ฏ๋ก ๊ฐ ์๋ฆฟ์๋ ๋บ๋๋ค)
- ๋ฐ๋ณต๋ฌธ์ด ์งํ๋ ์๋ก page ๊ฐ๊ณผ weight (์๋ฆฟ์) ๊ฐ์ ์์ ํด์ ์ผ์ชฝ ์๋ฅผ ์ ๊ฑฐํ๊ณ ์๋ฆฟ์๋ฅผ ๋๋ ค ๊ณ์ฐํฉ๋๋ค.
๐ ์ฝ๋ ์ง๋ณด๊ธฐ
๊ณ์ฐ ์ ํธ์๋ฅผ ์ํด ์ผ์ ์๋ฆฟ์๋ฅผ 9๋ก ๊ฐ์ ํ ํ ์ต๋ ๊ฐ์ ์ ์ฅํ ํ
์ด๊ณผํ ์๋ฆฟ์๋ ๋นผ๋ ๋ฐฉ์์ผ๋ก ์งํํ์ต๋๋ค.
package main
import (
"fmt"
"strconv"
)
func main() {
var page int
var page_count int
counts := make([]int, 10)
weight := 1
fmt.Scanln(&page)
// ์
๋ ฅ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ์ ์๋ฆฟ์ ๋งํผ ๋ฐ๋ณตํ๊ฒ ์์
page_count = len(strconv.Itoa(page))
for i := 0; i < page_count; i++ {
// ํ์ฌ page ๊ฐ์ ๊ธฐ์ค์ผ๋ก 1์ ์๋ฆฌ์๋ฅผ 9๋ก ๋ง๋ค๊ณ
var replaced, _ = strconv.Atoi(strconv.Itoa(page/10) + "9")
// ์ฐจ๋ฅผ ๊ตฌํจ
var remaining = replaced - page
// ์ผ์ ์๋ฆฌ์ 0~9๊ฐ ๋์ค๋ ์ต๋ ๋ฐ๋ณต ํ์ ์ ์ฅ
for index, _ := range counts {
counts[index] += (replaced/10 + 1) * weight
}
// ์ผ์ ์๋ฆฌ์์ ๋ฐ๋ณต์๊ฐ ์ด๊ณผ๋ ๋งํผ ๋นผ๊ธฐ
for i := 10 - remaining; i < 10; i++ {
counts[i] -= weight
}
// ์ผ์ ์๋ฆฌ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ์๋ฆฟ์์์ ์ผ์ ์๋ฆฟ์๊ฐ ๋ฐ๋ณต๋์ง
// ์์์ ์๊ธฐ๋ ์ ๋งํผ ๋บด๊ธฐ
strNum := strconv.Itoa(page)[:len(strconv.Itoa(page))-1]
for _, value := range strNum {
counts[int(value-'0')] -= weight * remaining
}
// ์๋ 1๋ถํฐ ์์ํ๋ฏ๋ก
// 0์ด ์๋ฆฟ์๋งํผ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ๋ ์์ (์ญ์ ์๋ฆฌ, ๋ฐฑ์ ์๋ฆฌ ์ด์๋ ๋ง์ฐฌ๊ฐ์ง)
counts[0] -= weight
// ํ์ด์ง๋ฅผ ์ค์ด๊ณ
page /= 10
// ์๋ฆฟ์๋ฅผ ์ฆ๊ฐ ์ํด
weight *= 10
}
for index, count := range counts {
if index == len(counts)-1 {
fmt.Printf("%d", count)
break
}
fmt.Printf("%d ", count)
}
}
'Go Lang > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[GoLang] ๋ฐฑ์ค 1027๋ฒ, ๊ณ ์ธต ๊ฑด๋ฌผ ํ์ด๋ณด๊ธฐ (3) | 2024.05.28 |
---|---|
[GoLang] ๋ฐฑ์ค 1012๋ฒ, ์ ๊ธฐ๋ ๋ฐฐ์ถ ํ์ด๋ณด๊ธฐ (0) | 2024.05.13 |
[GoLang] ๋ฐฑ์ค 1007๋ฒ, ๋ฒกํฐ ๋งค์นญ (1) | 2024.02.18 |
[GoLang] ๋ฐฑ์ค 1005๋ฒ, ACM Craft(์์ ์ ๋ ฌ) (1) | 2024.02.11 |
[GoLang] ๋ฐฑ์ค 1004๋ฒ, ์ด๋ฆฐ ์์(ํผํ๊ณ ๋ผ์ค ์ ๋ฆฌ) (1) | 2024.02.09 |