처음 풀이- 맞음(근데 조건식이 좀 복잡..)
#include <bits/stdc++.h>
using namespace std;
int N, m, M, T, R, exeCnt=0, totalTime=0, x;
int main(){
cin >> N >> m >> M >> T >> R;
x = m; //초기 x
if(x+T>M && x-R<m){
totalTime= -1;
exeCnt = N;
}
while(exeCnt < N){
if(x+T <=M && x-R<m){
x+=T;
exeCnt++;
totalTime++;
}else if(x+T<=M && x-R>= m){
x+=T;
exeCnt++;
totalTime++;
}else if(x+T>M && x-R<m){
x=m;
totalTime++;
}else if(x+T>M && x-R>=m){
x-=R;
totalTime++;
}
}
cout << totalTime;
return 0;
}
조건식을 작성할 때 x+T와 x-R에 대한 2X2 모든 조건을 다 고려했다.
x+T >=M일 때, x-R>=m
x+T >=M일 때, x-R<m
x+T < M일 때, x-R>=m
x+T < M일 때, x-R<m
수정 풀이- 조건을 간단화함.
#include <bits/stdc++.h>
using namespace std;
int N, m, M, T, R, exeCnt=0, totalTime=0, x;
int main(){
cin >> N >> m >> M >> T >> R;
x = m; //초기 x
if(x+T>M && x-R<m){
totalTime= -1;
exeCnt = N;
}
while(exeCnt < N){
if(x+T <= M){
x+=T;
exeCnt++;
totalTime++;
continue;
}
//x+T >M인 경우
if(x-R<m){
x=m;
totalTime++;
}else{
x-=R;
totalTime++;
}
}
cout << totalTime;
return 0;
}
x+T<=M이면 x-R이 어떠하든간에 무조건 운동을 하면된다.
즉 x-R을 따로 고려하지 않아도 되는 것이다.
그래서 if(x+T <=M) ...으로 작성할 수 있었다.
위의 if문이 실행되었다면 continue;로 나머지 아래의 코드를 진행하지 않고 다시 조건식으로 가 판단하도록 진행한다.
위의 if문이 실행되지 않으면 if문 아래 코드가 실행된다.
따로 if의 조건식이 없지만 x+T >M인 경우에 실행될 것이다.
이때는 x-R의 조건이 중요하다. 따라서 x-R의 조건을 가지고 코드를 작성했다.
'코테' 카테고리의 다른 글
백준 1225번- 이상한 곱셈 (0) | 2023.08.04 |
---|---|
백준 1212번 - 8진수 2진수 (1) | 2023.08.04 |
백준 1159번- 농구 경기 (0) | 2023.07.30 |
백준 1157번 - 단어 공부 (0) | 2023.07.28 |
백준 1110번-사이클 (0) | 2023.07.28 |