23631번 - 진심 좌우 반복뛰기

2024-04-03
#JAVA#백준

문제 풀이 시간 : 30분

 

문제 요약

  • 진심 좌우 반복뛰기한 거리의 총합이 Nm이상이면 “대머리”가 된다

  • 진심 좌우 반복뛰기는 처음 x=0에서 시작

  • 오른쪽으로 Km 뛴 다음 방향을 바꾼다.

  • 대머리가 되지 않기 위해 (N-1)m만큼만 뛴다.

  • 멈췄을 때의 위치와 방향을 구해라

문제 풀이

문제는 상당히 쉬워보였는데

내용이 재밌어서 그냥 풀었다

정답 코드

Java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.Buffer; import java.util.*; public class Main { public static int T,n,k,cur,temp; public static char run(){ cur = 0; temp = k; while(n>Math.abs(k)){ cur+=k; n-=Math.abs(k); if(k<0){ k=-(k-temp); } else k=-(k+temp); } if(k<0){ cur-=n-1; return 'L'; } else { cur += n-1; return 'R'; } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); T = Integer.parseInt(br.readLine()); for(int i=0;i<T;i++){ StringTokenizer st = new StringTokenizer(br.readLine()); n = Integer.parseInt(st.nextToken()); k = Integer.parseInt(st.nextToken()); char result = run(); sb.append(cur+" "+result+"\n"); } System.out.println(sb); } }