[ 6079 ] 코드업 6079 : 언제까지 더해야할까?
< 문제 >
- 1, 2, 3 ... 을 계속 더해 나갈 때, 그 합이 입력한 정수(0 ~ 1000)보다 같거나 작을 때까지만 계속 더하는 프로그램을 작성해보자.
< 문제 해석 >
- 0 ~ 1000 사이 값이 입력된다. 이 값을 x라 하겠다.
- 1부터 차례대로 더할 때 x와 같거나 커졌을 때, 마지막에 더한 정수가 무엇인지 구하는 문제이다.
- 즉, 1 + 2 + 3 ... + x >= n(입력 값)이 되는 최소의 x 값을 구하는 문제이다.
<코드 1 > for 문 이용.
a = int(input())
n = 0
for i in range(1,a):
n += i
if(n >= a ): # 입력값보다 같거나 커지면 loop 종료 및 출력
print (i)
break
=> 내가 제출한 코드인데 (정답 처리 되었음.) 입력 값이 0이나 1일 때 어떤 출력도 나오지 않는 오류가 존재한다. (코드 2에서 수정)
< 코드 2 > 코드 1 수정
a = int(input())
n = 0
if a<3 : print (a) # 0,1,2가 입력되었을 때 예외처리
for i in range(1,a):
n += i
if(n >= a ):
print (i)
break
< 코드 3 > while 문 사용
result, i = 0, 0
a = int(input())
while(result < a): # 결과가 입력값보다 작다면 반복
i += 1 #i 는 1부터 (0 입력시 초깃값 0이 출력됨)
result += i
print (i) #제일 마지막 i가 출력됨.
✏️ 코드 해석 ✏️
문제 자체에서 0 ~ 1000 사이의 값이 입력된다고 하였지만, 실제 테스트케이스에서 0, 1, 2를 검사하는 과정은 없는 것 같다.
=> 코드 1 제출했을 때 정답처리 되었음.
for 문에서 내가 (1, a) 라고 작성했기 때문에, 0이나 1이 들어갈 때는 for문이 실행되지 않는다.(ㅠㅠ)
📌 for 문과 while 문이 비슷하지만, 매우 다른 결과를 초래할 수도 있다는 것을 알게 되었다.
=> 문제 및 입력 조건을 잘 파악한 후 for 문와 while 문을 잘 선택하자.
(또는 for, while의 조건을 잘 짜 보자 ! 연습 또 연습 !! )
🔎 궁금한 점 🔎
위 문제의 정답의 수열이 [ 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 --- ] 으로 이루어져 있다.
=> 1은 1번, 2는 2번, 3은 3번, 4는 4번 ... 이렇게 이루어져있는 수열인데, 위 방법으로 푸는 것이 최선일까?
더 고민해봐야할 것 같다 !