2026. 3. 5. 12:01ㆍTIL
코딩 테스트 준비도 하고 코딩 실력도 키울 겸 프로그래머스 문제를 조금 풀어보려고 한다.
처음으로 코딩 문제를 풀어보는거라 걱정이 태산이지만 시작해보겠다.
오늘은 프로그래머스 입문 단계를 풀어볼 예정이다.
두 수의 차 구하기

기본적으로 함수 solution이 이렇게 준비되어있다.
int solution (int num1, int num2)
{
int answer = num1 - num2;
return answer;
}
간단한 코드기에 solution 함수를 채우고 넘어가보겠다.
int solution(int num1, int num2) {
int answer = 0;
if (-50000 <= num1 <= 50000 && -50000 <= num2 <= 50000) {
answer = num1 - num2;
return answer;
}
}
조건에 맞을 때 answer에 두 변수를 입력받아 답을 리턴하는 방법으로 기본적으로 채워져 있던 부분은 최대한 건들이지 않고 하려고 해보았다.
두 수의 곱, 두 수의 몫 부분도 풀었으나 부호만 바꾸면 되는 부분이기에 넘어가겠다.
나이 구하기

age를 입력받으면 출생 년도를 구하는 함수를 만드는 코드를 작성하는 문제이다.
2022년의 기준이기 때문에 2022에서 나이를 빼고, 태어난 년도부터 1살이기 때문에 1을 더해줘야 한다.
2022 - age + 1을 answer에 저장하고 출력하면 된다.
int solution(int age) {
int answer = 0;
answer = 2022 - age + 1;
return answer;
}

다음으로 넘어가보겠다.
숫자 비교하기

두 숫자를 비교해서 같으면 1, 아니면 -1을 리턴하도록 하는 함수이다.
문제 원본 형태를 유지하려고 했으나 너무 가성비가 떨어지는 형태라서 answer = 0과 return answer;를 지우고 새로 작성하려 한다.
int solution(int num1, int num2) {
if(num1 == num2)
return 1;
else
return -1;
}
두 변수를 입력받아 같으면 1, 아니면 -1을 리턴하도록 작성했다.

두 수의 나눗셈

아까 몫을 구하는 나눗셈에서 곱하기 1000을 하면 끝인 문제다.
int solution(int num1, int num2) {
int answer = num1 / num2 * 1000;
if (0 <= num1 <= 100 && 0 <= num2 <= 100)
return answer;
}

실행 결과가 틀렸다.
나온 값을 보니 소숫점이 버려진 몫을 구해서 기댓값과 다르게 나온 것 같다.
소숫점을 포함한 나눗셈을 해야한다.
정수만 출력해야 하기 때문에 int형식은 그대로 둬야한다.
또한 int로 반환해야 하기 때문에 변수 answer도 double 로 바꿔선 안된다.
그럼 나누는 변수를 double로 바꿔보는건 어떨까?
int solution(int num1, int num2) {
int answer = (double)num1 / (double)num2 * 1000;
if (0 <= num1 <= 100 && 0 <= num2 <= 100)
return answer;
}
실행해보면

정상적으로 작동한다.
각도기

일정 수치에 따라 다른 값을 내도록 하는 함수를 만드는 문제이다.
이 문제를 보고 switch, case문과 if, else if문이 떠올랐다.
switch, case문은 하나의 변수 값을 여러 값과 비교하여 실행할 코드를 선택하는 조건문이다.
정확히 같은 값인지 비교할 때 유용하다.
switch (변수)
{
case 값1:
실행할 코드;
break;
case 값2:
실행할 코드;
break;
default:
실행할 코드;
}
if, else if문은 조건식의 결과(True/False)에 따라 실행할 코드를 선택하는 조건문이다.
다양한 조건을 자유롭게 작성할 수 있다는 특징이 있다.
if (조건식)
{
실행할 코드
}
else if
{
실행할 코드
}
두 문법의 차이는 다음과 같다.
| 구분 | if-else | switch-case |
| 비교방식 | 조건식 비교 | 값 비교 |
| 사용 가능 연산 | <, >, <=, >=, == 등 | == 비교만 가능 |
| 범위 비교 | 가능 | 불가능 |
| 사용 데이터 | 다양한 타입 | 주로 정수, 문자 |
| 가독성 | 조건이 많으면 복잡해짐 | 같은 변수 비교 시 깔끔하게 볼 수 있음 |
그래서 위 문제에 맞게 조건식을 기반으로 다른 값을 내는 if-else문을 사용했다.
int solution(int angle) {
if(0<angle && angle <90)
return 1;
else if(angle == 90)
return 2;
else if(90<angle && angle<180)
return 3;
else if(angle == 180)
return 4;
else
return 0;
}
이런식으로 작성하면 된다.
참고로 C에서
if(0<angle<90)
if(90<angle<180)
이런식으로 코드를 작성하면 원하는 뜻대로 동작하지 않는다.
C는 수학처럼 연속비교를 지원하지 않기 때문이다.
0 < angle < 90 를 컴퓨터는
(0 < angle) < 90 이렇게 해석한다.
angle = 100이라면 0 < angle < 90 조건식에서 거짓이 나와야하는데,
0 < 100에서 True로 1을 받고, 1<90에서도 True가 나오기 때문에 완전 다른 조건식이 된다.
그래서 위 코드처럼 &&(AND 논리 연산자)를 활용해서 두 조건을 합쳐야한다.

정상적으로 원하는 값이 전부 나와 정답처리 되었다.
코딩테스트를 대비해서 프로그래머스를 풀어봤는데, 어려웠지만 디테일이 숨어있어 조금 고전을 했던 부분도 있었다.
오늘 고전했던 부분은
1. if-else와 switch의 선택
2. &&연산자로 두 조건을 합치기
3. 소수점을 버리지 않는 나눗셈
이 있었던 것 같다.
이 부분은 더 자주 사용해보며 익숙해져 꾹 누르면 바로 나올 수 있도록 연습해보려고 한다.
'TIL' 카테고리의 다른 글
| C++ < 상속, 다형성 > (0) | 2026.03.06 |
|---|---|
| C++ < Class 개념 > (0) | 2026.03.05 |
| 내일배움캠프 DAY10 C++ 상태 창 구현하기 (0) | 2026.03.04 |
| C언어 챕터1 : 환경 설정 < 1-7 : 리터럴, 1-8 : 자료형 > (0) | 2026.02.24 |
| C언어 챕터1 : 환경 설정 < 1-5 : main() 함수와 printf() 함수, 1-6 : 서식지정자 > (0) | 2026.02.24 |