본문 바로가기
코테

백준 1173번-운동

by arirang_ 2023. 7. 31.

처음 풀이- 맞음(근데 조건식이 좀 복잡..)

#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