관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

반복문 응용 1 : 백준 코딩테스트 A + B의 합을 구하는 케이스 문제 본문

알고리즘 및 자료 관리/알고리즘 & 코딩테스트

반복문 응용 1 : 백준 코딩테스트 A + B의 합을 구하는 케이스 문제

huenuri 2024. 8. 24. 21:52

오늘부터는 매일 코딩테스트 문제를 푼 것 중에서 자주 틀리거나 중요한 문제들을 하나의 유형으로 묶어서 학습일지를 써보기로 했다. 코딩테스트는 프로그래머스로 4월 초에 처음으로 풀기 시작했다. 근데 이 문제의 난이도가 너무 어려운 것 같아 코드업으로 풀다가 백준도 괜찮은 것 같아 2가지를 번갈아서 풀고 있다.

이때는 C++로 몇 개의 문제를 풀었으나 대부분의 문제들이 C언어 기준으로 되어 있는 것 같아 5월 초부터 다시 C 언어 책을 펼쳐보며 다시 공부하기 시작했다.

 

언어는 반복학습인데 매번 비슷한 유형의 문제를 틀린다는 걸 알게 되었다. 오늘은 그중에서 A+B의 합을 구하는 문제를 가져와보았다.


 

 

 

 


A+B-3 <10950번>

 

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

 

출력

각 테스트 케이스마다 A+B를 출력한다.

 

 

예제 입력 1

5
1 1
2 3
3 4
9 8
5 2

 

 

예제 출력 1

2
5
7
17
7

 

 

이렇게 기본적인 합을 구할 때도 여러번 반복해서 입력을 받을 때는 반복문을 사용한다.

 



 

 

 

 

A+B-7 <11021번>

 

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

 

출력

각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.

 

예제 입력 1

5
1 1
2 3
3 4
9 8
5 2

 

예제 출력 1

Case #1: 2
Case #2: 5
Case #3: 7
Case #4: 17
Case #5: 7

 

 

두번째 문제에서처럼 Case별로 번호를 매겨 출력을 할 수도 있는데 이때 번호는 i를 사용하면 간단하게 구할 수 있다.
내가 어려움을 느꼈던 문제는 다음의 문제들이었다.

 



 

 

A+B-5 <10952번>

 

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

입력의 마지막에는 0 두 개가 들어온다.

 

출력

각 테스트 케이스마다 A+B를 출력한다.

 

예제 입력 1

1 1
2 3
3 4
9 8
5 2
0 0

 

예제 출력 1

2
5
7
17
7

 

 

이 문제는 A와 B가 0이 입력될 때 반복을 종료하고 값을 출력하지 않아야 한다. 근데 for문과 달리 while문은 참일 때와 거짓일 때의 조건을 먼저 괄호 안에 넣어주어야 한다.
처음에는 while문 안에 if처럼 조건식을 넣어주니 변수를 알 수 없다는 경고 문구가 떴다.

 

while문에서는 0과 1은 무슨 뜻일까?
0은 거짓, 1은 참이다. 그러니까 1은 참일 때 계속해서 무한루프를 돌겠다는 의미이다.

 

 

while문 안에도 괄호에 조건식을 넣을 수 있지만, a != 0 && b != 0을 넣게 되면 계속해서 무한히 0이 되지 않을 때까지 반복이 될 것이다.
그러니까 if문은 따로 떼어서 while문 안쪽에 써주어야 하나보다. 그리고 반복을 빠져나올 때는 break를 사용한다는 걸 잊지 말자!

 



 

 

A+B-4 <10952번>

 

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

 

출력

각 테스트 케이스마다 A+B를 출력한다.

 

예제 입력 1

1 1
2 3
3 4
9 8
5 2

 

예제 출력 1

2
5
7
17
7

 

 

이 문제는 조금 전의 문제와 달리 그냥 입력을 종료하면 출력도 함께 종료되게 만드는 것이다. 그럴 때는 EOF를 사용한다. 케이스를 종료하고 싶을 때 아마도 enter키를 누르면 종료가 되게끔 만드는 문제인 것 같다.

찾아보니 EOF는 이런 거였다.

 

EOF = End Of File이며, 파일의 끝을 표현하기 위해 정의해 놓은 상수이다 (-1 값을 가지고 있다).

 

함수 호출의 실패나, 윈도우에서 ctrl + z , 리눅스에서 ctrl + d를 입력했을 경우 EOF를 반환한다.

 



 

 

 

학습을 마치고

 

그 외에도 반복문을 활용한 다양한 문제를 풀어보았다. 이 문제들은 이틀 전에 모두 한번 풀었고, 모르는 건 정답을 찾아보았다. 근데 오늘 다시 풀어보니 막히는 문제들이 여러 개 있었다. 역시 반복 학습이 중요한 것 같다.

처음 이 문제를 만났을 때는 30분을 헤매었는데 지금은 5분 안에 풀 수 있기도 하다. 놀라운 변화인 것 같다. 난 요즘 공부를 못하는 내게 부정적인 말을 하며, 자책과 화를 내고 있었다.


하지만 오늘 공부를 해보니 지난 몇 달간의 공부가 헛되지 않았음을 느꼈다. 비록 별로 하지는 않았어도 매일 조금이라도 프로그래밍 언어와 씨름했던 시간들은 모두 값진 시간이었다.

내일은 별 찍기 문제에 도전해보려고 한다. 별 찍기에는 참 다양한 문제들이 있다. 그 문제들을 정복한다면 반복문은 웬만큼 잘 활용할 수 있다고 본다. 이제 반복문을 어떻게 사용하는지 조금은 알 것 같다~