728x90
반응형
문제 설명
철수는 발명을 되게 좋아한다. 컴퓨터 프로그램도 굉장히 좋아한다.
어느 날 민호는 컴퓨터를 사용하던 중 휴지통이 꽉 차서 불편했다.
그래서 휴지통이 n만큼 차면 알아서 쓰레기를 압축해주는 휴지통을 만들기로 했다.
이 때 압축하는 알고리즘은 다음과 같다.
10의 자릿수와 1의 자릿수를 서로 바꾸고, 거기에 2를 곱한다.
EX) 70일 경우 14가 된다.( 70 -> 07 -> 14 )
이 알고리즘은 가끔 부작용을 일으킨다. 오히려 휴지통의 내용이 더 많아 질지도 모른다.
만약 n 수치가 100이 넘는 이 알고리즘의 심각한 부작용이 일어난다면 100의 자릿수는 무시된다.
![](https://blog.kakaocdn.net/dn/cTkcA6/btrAUzgd5nB/waWiqLr7QQuDaVnkc9QaY1/img.png)
입력
휴지통의 자동 압축 기준인 수치 n이 입력된다(1<=n<=99)
출력
1번째 줄에 휴지통을 압축했을 때 양을 출력한다.
2번째 줄에 그 양이 50이하이면 GOOD 을 출력하고, 50을 넘으면 OH MY GOD 을 출력한다.
입력 예시
90
출력 예시
18
GOOD
1) 나머지를 이용하는 방법
#include <stdio.h>
int main() {
int n, bin;
scanf("%d", &n);
bin = (n % 10 * 10) + (n / 10); //십의 자리와 일의 자리를 바꾼다.
bin = bin * 2; //2배 한다.
bin = bin % 100; //100의 자리를 무시한다.
printf("%d\n", bin);
if (bin<=50){
printf("GOOD");
}else{
printf("OH MY GOD");
}
return 0;
}
나눗셈의 특성을 이용하여 십의 자리와 일의 자리를 바꾸는 방법이다.
수학적으로 풀어낸 훌륭한 풀이이다.
n 을 10으로 나눴을 때
10의 자리 = 몫
1의 자리 = 나머지 이므로
나머지에 10를 곱한다.
1의 자리 -> 10의 자리
몫 -> 1의 자리
100의 자리를 무시하므로 나머지만 취한다.
2) 십의 자리, 일의 자리를 나눠서 푸는 방법
#include<stdio.h>
int main() {
int n,ten,one;
scanf("%01d%01d",&ten,&one); //처음부터 십의자리와 일의 자리를 따로 입력받는다.
num = (10*one + ten)*2;
if(n>100){ //결괏값이 98이하인 것을 이용
n = n - 100;
}
printf("%d\n",n);
if(num<=50){
printf("GOOD");
}else{
printf("OH MY GOD");
}
return 0;
}
n의 정의역을 이용한 방법이다.
n이 알고리즘을 거치면 아무리 커도 98 까지 나오는 특성을 이용한 프로그램이다.
반응형
'개발 > 코딩테스트' 카테고리의 다른 글
코드업(codeup.co.kr) 1542 : 함수로 prime 또는 composite 출력하기 해설 (C언어) (0) | 2022.11.01 |
---|---|
코드업(codeup.co.kr) 1550 : 함수의 양의 제곱근의 정수 부분만 리턴하기 해설 (C언어) (0) | 2022.11.01 |
코드업(codeup.co.kr) 1210 : 칼로리 계산하기 해설 (C언어) (1) | 2022.05.02 |
코드업(codeup.co.kr) 1205 : 최댓값 해설 (C언어) (0) | 2022.05.01 |
코드업(codeup.co.kr) 1097 : 바둑알 십자 뒤집기 해설 (C언어) (0) | 2022.03.26 |