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

조건문 응용 1 - if~else, switch문을 사용해 조건에 맞는 결과값 출력하기 본문

알고리즘 및 자료 관리/알고리즘

조건문 응용 1 - if~else, switch문을 사용해 조건에 맞는 결과값 출력하기

huenuri 2024. 8. 24. 22:12

오늘 소수를 판별하는 문제를 풀려고 했으나 별 찍기 문제를 푸는데 시간이 많이 걸렸다. 남은 아침 시간에 지난번에 풀었던 문제들을 한번 더 복습하는 시간을 갖기로 했다.

반복문부터 학습한 것들을 정리했으나 조건문도 어려운 문제들이 많아 이것들도 정리해보려고 한다.

이 문제는 코드업에서 가져왔다.


 

 

 

아르바이트 가는 날 <1160번>

아르바이트 가는 날

 

아르바이트 가는 날

주원이는 월, 수, 금, 일 아르바이트를 간다. 다음은 요일의 순서이다. 월요일 화요일 수요일 목요일 금요일 토요일 일요일 요일의 번호가 입력으로 주어지면 그 날이 아르바이트 가는 날이면 "oh

codeup.kr

 

🌹 문제 1번

철수는 정수 두 개를 입력하면 두 수 사이의 기본 연산이 자동으로 이루어지는 프로그램을 제작하고 싶다.

기본 연산이란, 더하기, 빼기, 곱하기, 나누기, 나머지 연산 등 5가지 연산을 말한다.

두 정수의 기본 연산을 출력하는 정수 계산기를 제작하시오.

 

#include <stdio.h>

int main(void)
{
	int day;
	scanf_s("%d", &day);

	switch (day)
	{
	case 1:
	case 3:
	case 5:
	case 7:
		printf("oh my god\n");
		break;
	case 2:
	case 4:
	case 6:
		printf("enjoy\n");
		break;
	}

	return 0;
}

 

 

 

이 문제는 switch문을 활용하면 쉽게 풀 수 있다. switch는 if문과 조금 다른데, 비슷한 유형의 조건들이 반복될 경우 사용하는 것 같다.

보통 정수로 식을 나누어서 구분할 때 사용된다. 달수나 날짜 계산 같은 것들..


 

 

홀수와 짝수 그리고 더하기 <1161번>

 

🌹 문제 2번

홀수와 짝수 그리고 더하기

 

홀수와 짝수 그리고 더하기

만약 첫번째 정수가 홀수이면 "홀수"를 출력하고, 짝수이면 "짝수"를 출력한 후  "+"를 출력한다. 그리고 두번째 정수가 홀수이면 "홀수"를 출력하고, 짝수이면 "짝수"를 출력한 후  "="을 출력하

codeup.kr

 

정수 두개가 입력으로 들어온다.

만약 첫번째 정수가 홀수이면 "홀수"를 출력하고, 짝수이면 "짝수"를 출력한 후 "+"를 출력한다.

그리고 두번째 정수가 홀수이면 "홀수"를 출력하고, 짝수이면 "짝수"를 출력한 후 "="을 출력하고 결과로 나오는 값이 홀수인지 짝수인지 출력한다.

예를들어, 5 7 이 입력되면 "홀수+홀수=짝수"가 출력된다. 5 6 이 입력되면 "홀수+짝수=홀수"가 출력된다.

 

#include <stdio.h>

int main(void)
{
	int num1, num2;
	scanf_s("%d%d", &num1, &num2);

	if (num1 % 2 == 1)
	{
		printf("홀수+");
		if (num2 % 2 == 1)
		{
			printf("홀수=");
		}
		else
			printf("짝수=");
	}
	else
	{
		printf("짝수+");	
		if (num2 % 2 == 1)
		{
			printf("홀수=");
		}
		else
			printf("짝수=");
	}

	if ((num1 + num2) % 2 == 1)
	{
		printf("홀수");
	}
	else
		printf("짝수");

	return 0;
}

 

 

 

2번 문제는 짝수와 홀수를 더한 값을 알아보는 건데, 첫번째 수와 두번째 수를 2로 나누어서 그 수가 홀수인지 짝수인지 먼저 알아보면 된다.

그리고 이 결과값도 홀수인지 짝수인지 구별하기 위해 if문을 하나 더 사용한다.
처음에는 if를 짝수와 홀수 구별하는 문장에 중첩되게 사용하기도 했었다.

이 문제는 중요하니 다음에 한번 더 풀어봐야겠다.


 

 

당신의 사주를 봐 드립니다 1 <1162번>

당신의 사주를 봐 드립니다 1

 

당신의 사주를 봐 드립니다 1

태어난 해, 월, 일을 입력받아 사주팔자를 보는 프로그램을 작성하시오. 사주를 보는 방법) 세 수(년,월,일)가 주어지면,  (년 - 월 + 일)에 마지막 숫자가 0이면 "대박"을 출력, 그렇지 않으면 "그

codeup.kr

 

🌹 문제 3번

태어난 해, 월, 일을 입력받아 사주팔자를 보는 프로그램을 작성하시오.

<사주를 보는 방법>

세 수(년,월,일)가 주어지면, (년 - 월 + 일)에 마지막 숫자가 0이면 "대박"을 출력, 그렇지 않으면 "그럭저럭"을 출력하세요.

 

#include <stdio.h>

int main(void)
{
	int year, month, day;
	scanf_s("%d%d%d", &year, &month, &day);

	if ((year - month + day) % 10 == 0)
	{
		printf("대박");
	}
	else
		printf("그럭저럭");

	return 0;
}

 

 

 

3번 문제는 식만 잘 쓰면 어렵지 않게 풀 수 있었다. 가끔씩 입력할 때 %d의 개수를 생략해서 실수를 할 때가 있다.


 

 

당신의 사주를 봐 드립니다 2 <1163번>

당신의 사주를 봐 드립니다 2

 

당신의 사주를 봐 드립니다 2

태어난 해, 월, 일을 입력받아 사주팔자를 보는 프로그램을 작성하시오. 사주를 보는 방법) 세 수(년,월,일)가 주어지면,  (년 + 월 + 일)에 100의 자리 숫자가 짝수이면 "대박"을 출력, 그렇지 않으

codeup.kr

 

🌹 문제 3

태어난 해, 월, 일을 입력받아 사주팔자를 보는 프로그램을 작성하시오.

<사주를 보는 방법>

세 수(년,월,일)가 주어지면,  (년 + 월 + 일)에 100의 자리 숫자가 짝수이면 "대박"을 출력, 그렇지 않으면 "그럭저럭"을 출력하세요.

#include <stdio.h>

int main(void)
{
	int year, month, day;
	scanf_s("%d%d%d", &year, &month, &day);
	int luck;
	luck = (((year + month + day) % 1000) / 100) % 2 == 0;

	if (luck)
	{
		printf("대박");
	}
	else
		printf("그럭저럭");

	return 0;
}

 

 

 

 

3번 문제는 2번보다는 조금 어려웠다. 지금은 잘할 수 있게 되었지만 지난주까지만 해도 난 자릿수를 구별하는 문제에서 어려움을 느꼈다.

나머지와 몫 연산을 사용해서 1, 10, 100 등의 자릿수를 출력하는 문제를 앞으로도 계속 연습해볼 것이다.


 

 

윤년 판별 <1166번>

윤년 판별

 

윤년 판별

입력은 키보드로 이루어진다. 연도를 나타내는 자연수 n이 입력된다. (단, 1<= n <= 2^32 - 1인 정수)

codeup.kr

 

🌹 문제 4번

2월이 29일까지 있는 해를 윤년이라고 한다. 한 자연수를 입력받아서 윤년인지 아닌지를 판단하는 프로그램을 작성하시오. 단, 윤년은 다음 두 조건 중 하나만 만족하면 된다.

(1) 400의 배수이면 무조건 윤년이다.
(2) 4의 배수이며, 100의 배수가 아니면 윤년이다.

#include <stdio.h>

int main(void)
{
	int year;
	scanf_s("%d", &year);

	if ((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0))
	{
		printf("Leap");
	}
	else
		printf("Normal");

	return 0;
}

 

 

윤년을 판별하는 문제도 처음에는 정말 어려웠는데 지금은 아주 쉽게 할 수 있다.

이 문제에서 주의할 점은 어떤 경우에 ||을 사용하고 &&을 사용하는지이다.


 

 

 

오늘의 코딩 학습을 마치고

그동안은 문제만 풀었지 문제에 대해서 스스로 설명해보거나 글로 써본 적이 없었다. 근데 이렇게 해보니 확실히 기억이 잘되고 어떤 부분을 알고 이해가 안되는지 알게 되는 것 같았다.

알고 있다고 생각했던 문제도 설명을 해보면 진짜 아는 게 아닐 경우가 많았다.
앞으로도 이렇게 배운 것들을 스스로 설명할 수 있는 수준이 될때까지 학습해볼 것이다.

주말에는 이런 식의 코딩 공부가 아닌 더욱 재미있는 프로그래밍의 세계가 있는지 찾아보고 싶다.


난 싫증을 잘 느끼니 한 가지 방식을 오래하면 지루해서 더이상 진행하기 힘들어진다.

그리고 한번 어떤 일을 하다가 중단하면 모든 기록을 삭제하는 경우가 굉장히 많았다. 내가 살면서 쓴 글은 정말 많지만, 남아있는 것들은 거의 없다. 아마도 완전무결함을 추구하는 성격적 특성 때문인 것 같다.

이제는 부족하더라도 완벽하지 않아도 괜찮으니 한 걸음씩만 나아가볼 생각이다.