dev/algorithm
BOJ / 1024번 / 수열의 합 [Go][Python3]
crscnt
2021. 1. 9. 21:00
👩🏻💻 문제
1024번: 수열의 합
첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.
www.acmicpc.net
✍🏻 풀이
🎨 Go
// https://www.acmicpc.net/problem/1024
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n, l int
fmt.Fscanln(reader, &n, &l)
start := n/l - l/2
var sum int
for {
if start < 0 {
start++
}
sum = 0
for i := start; i < start+l; i++ {
sum += i
}
if sum < n {
start++
} else if sum == n {
if start < 0 {
fmt.Fprintln(writer, -1)
return
}
break
} else if sum > n {
l++
if l > 100 {
fmt.Fprintln(writer, -1)
return
}
start = n/l - l/2
}
}
for i := start; i < start+l; i++ {
fmt.Fprintf(writer, "%d ", i)
}
fmt.Fprintln(writer, "")
}
🎨 Python3
# https://www.acmicpc.net/problem/1024
import sys
if __name__ == "__main__":
n, l = list(map(int, sys.stdin.readline().split()))
start = n//l - l//2
total = 0
is_valid = True
while True:
if start < 0:
start += 1
total = 0
for i in range(start, start+l):
total += i
if total < n:
start += 1
elif total == n:
if start < 0:
is_valid = False
break
break
elif total > n:
l += 1
if l > 100:
is_valid = False
break
start = n//l - l//2
if is_valid:
for i in range(start, start+l):
print("{} ".format(i), end='')
print()
else:
print(-1)
728x90