문제 |
민호는 발명을 되게 좋아하고, 컴퓨터 프로그램도 되게 좋아한다. 어느 날 민호는 컴퓨터를 사용하던 중 휴지통이 꽉 차서 불편을 느꼈다. 그래서 휴지통이 n만큼 차면 알아서 쓰레기를 압축해주는 휴지통을 만들려고 한다. 이때 압축하는 알고리즘은 다음과 같다. 10의 자릿수와 1의 자릿수를 서로 바꾸고, 거기에 2를 곱한다. 예) 70일 경우 14가 된다.( 70 -> 07 -> 14 ) 이 알고리즘은 때로는 부작용을 일으켜 휴지통의 내용이 더 많아 질지도 모른다. 만약 이 알고리즘의 심각한 부작용으로 수치가 100이 넘는다면 100의 자릿수는 무시된다. |
입력 |
휴지통의 자동 압축 기준인 수치 n이 입력된다. ( 1 <= n <= 99 ) |
출력 |
첫째 줄에 휴지통을 압축했을 때 양을 출력한다. 둘째 줄에 그 양이 50 이하이면 GOOD을 출력하고, 50을 넘으면 OH MY GOD을 출력한다. |
입력 예시 |
90 |
출력 예시 |
18 GOOD |
다른 함수나 수식을 사용하지 않고 간단한 사칙연산과 if문으로 해결이 가능
압축할 파일을 입력받을 변수, 일의자리와 10의 자리를 바꿀 변수 두 개, 연산이 끝난 값을 저장할 변수 한 개로 해결했다.
int n, a, b, c, sum = 0;
scanf("%d", &n); //n은 입력 값
우선 연산이 필요없는 1의 자리는 if를 이용해서 제외를 시켜버린다.
if (n < 10) {
sum = n * 2; //모든 결과를 저장할 변수 sum
}
나머지 10이상의 수를 입력받을 때 1의 자리와 10의 자리의 연산을 진행해야 한다.
else {
a = n % 10; //1의 자리를 저장
b = n / 10; //10의 자리를 저장
a *= 10; //1의자리를 10의 자리로 끌어올리기 위해서 10을 곱함
c = a + b; //두수를 더하게 되면 1의자리와 10의자리가 바뀐다.
sum += c * 2;
if (sum > 100) {
sum %= 100; //100을 넘어갈경우 나누기100을 이용해서 100이하는 저장하고 이상은 날리기
}
}
출력을 조건을 이용해서 50 이하와 초과의 출력 값을 다르게 출력
if (sum <= 50)
printf("%d\nGOOD", sum);
else
printf("%d\nOH MY GOD", sum);
전체 코드
#include <stdio.h>
#pragma warning (disable : 4996)
int main() {
int n, a, b, c, sum = 0;
scanf("%d", &n);
if (n < 10) {
sum = n * 2;
}
else {
a = n % 10;
b = n / 10;
a *= 10;
c = a + b;
sum += c * 2;
if (sum > 100) {
sum %= 100;
}
}
if (sum <= 50)
printf("%d\nGOOD", sum);
else
printf("%d\nOH MY GOD", sum);
return 0;
}