우연히 현대자동차 관련 알고리즘 문제풀이에 관심이 생겨서
낮은 레벨부터 풀어보고 있다.
LEVEL1은 말도 안되게 쉬운 문제부터
알고리즘 다운 문제들이 많이 분포해있다
문제 설명
https://softeer.ai/practice/7368
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
문제에 대한 대략적인 설명은 "무궁화 꽃이 피었습니다." 게임을 하는데 술래가 뒤돌았을때, 앞으로 나아가야 한다는 것이다.
1) 남우와 술래는 처음에 거리 d 만큼 떨어져 있습니다.
2) 남우는 술래를 향해 뛰어가 술래를 터치하고 다시 출발선으로 돌아와야 합니다.
3) 남우는 술래가 뒤를 돌아보고 있을 때만 움직일 수 있으며, 앞을 바라보고 있을 때는 절대 움직일 수 없습니다.
4) 술래는 처음 a 초간은 뒤를 보고 있고, 그 다음 b 초간은 앞을 보고 있고, 다시 a 초간 뒤를, b 초간 앞을, ... 이 과정을 계속 반복합니다.
5) 남우가 술래를 터치한 직후, 술래의 움직임은 달라집니다. 터치된 직후 처음 b 초간은 뒤를 보고 있고, 그 다음 a 초간은 앞을 보고 있고, 다시 b 초간 뒤를, a 초간 앞을, ... 이 과정을 계속 반복합니다.
6) 술래가 앞, 뒤를 돌아보기 위해 자세를 바꾸는 데 걸리는 시간은 0초라고 가정해도 좋습니다.
7) 남우는 최선을 다해 움직이며, 1초에 거리 1만큼 이동이 가능합니다.
문제 풀이
처음에는 문제가 잘 이해가지 않았는데,
결론적으로는 술래를 잡으러 갈때는 a만큼 갔다가 b만큼 쉬고
돌아올때는 b만큼 갔다가 a만큼 쉬면 된다.
* 여기서 헷갈렸던 포인트 하나는 잡으러 가거나 돌아오는 거리 d가 a나 b보다 작으면 따로 쉴 필요는 없다. (한번에 간 것)
결과물
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int distance = sc.nextInt();
//처음엔 a초간 뒤, b초간 앞 -> a초간 앞, b초간 뒤,
int go = distance;
int back = distance;
int goSec = 0;
int backSec = 0;
while(true){
if(go == 0 && back == 0){
break;
}
if(go > 0){
if(go >= a){
goSec += a; //앞으로 감
go-=a;
if(go>0){
goSec += b; //기다림
}
// System.out.println(goSec);
}else{
goSec += go;
go = 0;
}
}
if(go == 0){
if(back >= b){
backSec += b; //앞으로 감
back -= b;
if(back > 0){
backSec += a; //기다림
}
}else{
backSec += back;
back = 0;
}
}
}
// System.out.println(goSec);
// System.out.println(backSec);
System.out.println(goSec+backSec);
}
}