카테고리 없음
[C] 백준 #2455, #2460, #2476
멘멘
2023. 11. 12. 19:07
#2455

문제 설명
기차가 1번역부터 4번역까지 갈때, 기차 안에 사람이 가장 많을 때의 사람 수를 계산하여야 한다.
내림 | 탐 | |
1 | 0 | 32 |
2 | 3 | 13 |
3 | 28 | 25 |
4 | 39 | 0 |
위와 같은 경우에서는 기차 안에 사람이 가장 많을 떄는 2번역의 경우로 총 42명의 사람이 기차에 있을 때다. 기차에 사람이 가장 많을 떄의 사람 수를 계산하면 된다.
풀이 과정
먼저 기차가 네 역을 지날때의 사람 수를 담을 배열 train을 만든다. max는 최대 몇명인지 구하기 위한 변수이다.
반복문을 통해 나가고 들어오는 사람 수를 입력받고, train[i]에 연산하여 값을 넣어준다.
이때 매 반복마다 train[i]가 max보다 크면 max에 값을 갱신하여 최댓값을 출력하여주었다.
#include <stdio.h>
int main() {
int train[4];
int max = 0;
for(int i = 0; i<4; i++){
int out, in;
scanf("%d",&out);
scanf("%d",&in);
if(i == 0)
train[i] = out;
else
train[i] = train[i-1] -out;
train[i] += in;
if( i != 0 && train[i] > max)
max = train[i];
else if( i == 0){
max = train[0];
}
}
printf("%d",max);
return 0;
}
#2460

문제 설명
위와 조건은 똑같으나 역의 개수가 10개로 바뀌는 등의 변화가 있었다.
풀이 과정
위와 비슷하게 풀이를 진행하였다.
#include <stdio.h>
int main() {
int train[10];
int max = 0;
for(int i = 0; i<10; i++){
int out, in;
scanf("%d",&out);
scanf("%d",&in);
if(i == 0)
train[i] = out;
else
train[i] = train[i-1] -out;
train[i] += in;
if( i != 0 && train[i] > max)
max = train[i];
else if( i == 0){
max = train[0];
}
}
printf("%d",max);
return 0;
}
#2476

문제 설명
3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
- 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
- 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
- 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.
N명이 이 게임에 참여했을 때, 가장 많은 상금을 받은 사람의 상금을 출력하면 된다.
풀이 과정
소위 말하는 노가다(...)로 이 문제를 풀어서 크게 설명할 것이 많지 않다.
N은 사람 수, max는 최대 상금을 담기 위한 변수이고 반복문을 통해 주사위의 결과를 담을 a,b,c를 입력받아서 값을 일일히 대소비교한다. 그 뒤 연산을 해준후 이전 max값과 비교하여 갱신해주었다.
#include <stdio.h>
int main() {
int N;
scanf("%d", &N);
int max = 0;
for(int i = 0; i<N; i++){
int a,b,c,res=0;
scanf("%d %d %d", &a,&b,&c);
if(a==b){
if(b==c)
res = 10000 + a*1000;
else
res = 1000 + a*100;
}else if(b==c){
res = 1000 + b*100;
}else if(a==c){
res = 1000 + a*100;
}else{
if(a>=b && a>=c)
res = a * 100;
else if(b>=a&&b>=c)
res = b * 100;
else
res = c * 100;
}
if(max<res){
max = res;
}
}
printf("%d",max);
return 0;
}