#1085
문제 설명
다음은 임의의 점 위에서 사각형의 경계선(모서리)까지 가는 최단거리를 구하는 문제이다.
아래 그림과 같이 x,y,w,h 값이 주어진다.
풀이 과정
한점에서 모서리까지 갈 수 있는 최단거리의 경우는 x, y, w-x, h-y 총 4가지 경우이다.
이 중 가장 짧은 거리가 최단거리라고 할 수 있다. 따라서 최솟값을 구해야한다.
나의 경우 배열에 값을 넣어 이중반복문을 돌려서 최솟값을 구했다.
#include <stdio.h>
int main(){
int x,y,w,h;
scanf("%d %d %d %d",&x, &y, &w, &h);
//순서대로 입력받기
int num[4]; //num 배열을 생성하여 각 거리값 계산
num[0] = x;
num[1] = y;
num[2] = w-x;
num[3] = h-y;
//for 루프문을 통한 거리 오름차순
for(int i = 0; i < 3; i++){
for(int j = i+1; j< 4; j++){
if(num[i] >= num[j]){
int tmp = num[i];
num[i] = num[j];
num[j] = tmp;
}
}
}
//가장 작은 값인 num[0]값 출력
printf("%d\n", num[0]);
return 0;
}
#1267
문제 설명
영식 요금제는 30초마다 10원, 민식 요금제는 60초마다 15원이 청구될 때 어떤 요금제가 더 이득인지 구하는 문제이다.
통화횟수와 시간을 입력받으면 둘 중 어느 요금제가 더 이득인지 구하는 문제다.
풀이 과정
0~29초, 30~59초 ... 와 같이 30초 단위로 10원씩 늘어나므로 시간을 30초로 나누어 10원을 곱해준다(0초도 요금에 포함이므로 10을 더해준 상태에서 시작한다)
위와 마찬가지로 민식 요금제는 60초 단위로 나누어 15원을 곱해준다.
이를 계산하면 적절한 요금제가 출력된다.
#include <stdio.h>
int main(){
int N = 0; //통화횟수
int time = 0, Ypay = 0, Mpay = 0;
scanf("%d",&N);
//요금제별 통화시간에 따른 계산
for(int i =0; i<N; i++){
scanf("%d",&time);
Ypay += 10 + time / 30 * 10;
Mpay += 15 + time / 60 * 15;
}
//출력
if(Ypay < Mpay){
printf("Y %d",Ypay);
}else if(Mpay < Ypay){
printf("M %d",Mpay);
}else if(Ypay == Mpay){
printf("Y M %d",Ypay);
}
return 0;
}
#1284
문제 설명
호수판을 만들때 각 호수판은 숫자마다 가지는 규격이 있는데,
- 각 숫자 사이에는 1cm의 여백이 들어가야한다.
- 1은 2cm의 너비를 차지해야한다. 0은 4cm의 너비를 차지해야한다. 나머지 숫자는 모두 3cm의 너비를 차지한다.
- 호수판의 경계와 숫자 사이에는 1cm의 여백이 들어가야한다.
고객에게 전달할 호수판 규격을 구하는 문제이다.
풀이 과정
입력받은 수의 1자리씩 숫자를 확인해야하므로 while문을 통해 n자리수의 숫자를 10으로 나누면서 맨 뒷자리 숫자마다 계산을 진행했다. 1의 자리를 확인하고 규격값을 계산하면 이를 버리고 입력받은 수를 10으로 나누는 행위를 반복하여 한 숫자마다의 규격을 계산할 수 있었다. 그리고 0을 입력받을 때까지 이 반복을 계속한다.
#include <stdio.h>
int main(){
int n = 1;
int cnt = 0;
int total = 0;
scanf("%d",&n);
while(n){ // 0 받을때까지 반복
cnt = n%10;
total += 1;
while(n){ //n을 10으로 나누면서 나머지값을 통해 뒷자리 1개씩 계산
if(cnt==1){
total += 2;
}else if(cnt==0){
total += 4;
}else{
total += 3;
}
total += 1; //해당 숫자에 맞는 여백 계산
n/=10;
cnt = n%10;
}
printf("%d\n",total); //결과
total = 0; //다음 반복을 위한 초기화
scanf("%d",&n);
}
return 0;
}
'정리 > C' 카테고리의 다른 글
[C] 백준 #2010, #2441, #2442 (0) | 2023.10.01 |
---|---|
[C] 백준 #1547, #1598, #1703 (0) | 2023.09.19 |
[c] 백준 10870 (0) | 2023.08.27 |
[c] 코딩도장 파일입출력 문제 (0) | 2023.08.27 |
[c] 파일 입출력 (0) | 2023.08.27 |
댓글