본문 바로가기
CODING/BAEKJOON

백준 C언어 4단계 while문 문제풀이 : 10952, 10951, 1110

by pharmerci 2021. 12. 20.
728x90

10952

이 문제는 A와 B에 0 0을 입력받을 때까지 A+B를 출력하는 문제이다.

 

 

 

 

 

while이 있는 괄호 안에다가 a!=0&&b!=0을 넣으니까 아무리 해도 안되길래(0 0을 넣으면 바로 빠져나와야 하는데. 더하기를 출력하고 while문을 탈출한다는 점에서 틀린듯ㅅ)

그냥 a랑 b가 0이 되면 while문을 빠져나오는 방식으로 코드를 짜주었다.

 

 

 

 


10951

이 문제는 위에서 푼 10952번과 다르게 0이 나올때까지가 아닌 계속해서 a+b를 출력하는 문제이다.

 

 

 

 

처음에는 이렇게 c는 계속 바뀌지 않는 0일테니까 c가 0인동안 계속해서 a b를 입력받고 더하여 출력하는 과정을 반복하게 했다.

이렇게 하니까 시간초과가 뜨면서 실패하게 된다.

백준 문제에서 시간초과는 코드가 맘에 안들게 길때 내는 오류라고 한다.

2번 문제 소개에서

입력이 끝날때까지 A+B를 출력하는 문제 EOF에 대해 알아보세요

라고 적혀있는걸 발견하고 EOF가 뭔지 찾아봤다.

 

EOF는 End Of File의 줄임말로 파일 끝에 도달하면 특별한 값을 반환하도록 한다.

윈도우에서는 ctrl + z를 누르면 실행된다.

그러니까 EOF를 사용한다는 것은, 윈도우에서 컨트롤 z를 누를때까지 계속해서 실행될 것이라는 뜻!

 

 

 

 

 

 

 

그러니까 이 문제에서도 a랑 b를 입력받을 때 ctrl + z를 안누르는 동안 계속해서 a+b를 출력해라..

이런식으로 문제를 풀어주면 된다.

 

 

 

 

 


1110

이 문제는 원래 수로 돌아올때까지 연산을 반복하는 문제이다.

 

예를 들어 설명하는 게 훨씬 쉬움

 

ex) 26입력

2+6=8 -> 68

6+8=14 -> 84

8+4=12 -> 42

4+2=6 -> 26

 

다시 26으로 돌아왔다!

4번의 계산작업을 거쳤으니 4 출력

 

결과적으로 26을 입력하면 4가 출력되는 이런 알고리즘

 

다른 0~99의 수에 모두 적용이 가능해야 한다.

 

그래서 0~9의 수는 처음에 00 01 02 ... 09 이런식으로 적용될 수 있도록 해야한다.

 

 

 

 

변수 구성은 다음과 같이 했다.

a -> 입력받을 변수

N -> 한번 계산할 때마다 한번씩 카운팅 해줄 변수

temp -> 처음에 입력받은 a로 돌아가는지 계속 확인해주는 변수

x -> temp의 10의자리

y -> temp의 1의 자리

 

이 문제는 do while을 써서 풀어줬다.

 

계산을 다 끝내고 나서 temp가 a랑 같지 않으면 계속 진행되도록 했다.

 

x랑 y는 나누기 연산자와 나머지 연산자를 이용해주었다.

 

17줄에서 (x+y)%10은 x랑 y랑 더해서 10의자리가 넘어가는 경우를 대비해서 나머지 연산자를 이용했고

y*10은 이전 숫자의 1의자리가 이제는 10의자리로 바뀌기 때문에 10을 곱해주었다.

 

 

 

 

 

 

 

728x90