본문 바로가기
알고리즘/Samsung

SW 1940. 가랏! RC카 !

by son_i 2023. 5. 5.
728x90

SW Expert Academy

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

자바

RC카의 상태는 3가지 0: 유지, 1: 가속, 2: 감속 .

1,2 일 경우는 가속도의 값이 추가로 주어짐. 가속도의 단위는 m/s^2이고  가속도의 값은 1m/s^2 또는 2m/s^2.

- 입력 : test케이스 수 T, command의 수 N , 매 줄마다 각각의 command. 

- 구해야하는 것 : N초동안 이동한 거리

- 생각해야할 것 : 감속속도 > 현재속도 - > 속도 0/ms^2

 

현재속도를 저장할 변수 speed

총 이동 거리를 저장할 변수 : result

현재 차의 상태 저장할 변수 : ch

ch가 0이면 현 상태 유지이고 가속도 값을 추가로 받지 않음.

ch가 0이 아니면 가속도 값을 추가로 받음

 조건 1. ch가 1이면 // 가속이면

     result += speed + m_ss; 현재속도에 가속도만큼 추가되어 이동거리에 더해넣는다.

     speed += m_ss; 현재 속도에서 가속도를 더해서 넣는다.

  조건 2. ch가 2이면 // 감속이면

     if(speed < m_ss) //현재 속도보다 감속속도가 더 크다면

        continue; 속도가 0m/s^2이므로 아무거리도 이동하지 않으니까 다음 반복 진행

//여기에 속도를 변경하는 작업은 안 해주었네 .. ? 근데 pass를 헀네 ..?

  반례로 

1

5

1 1

2 2

0 0

1 1

을 넣어봤는데 이동거리는 2가 나와야하는데 5가 나왔다.

그래서 여기다가 speed = 0;인 조건을 추가했다 !

 

     else //현재의 속도보다 감속속도가 작다면

        result += speed - m_ss; 이동거리는 현재속도에 감속속도가 빠진 속도만큼 이

        speed -= m_ss; 현재 속도에 감속속도를 빼서 저장

  조건 3. ch가 0이면 현재속도 유지

     result += speed; 현재속도만큼 이동거리에 더해서 넣음.

 

package algorithm;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

/*
   사용하는 클래스명이 Solution 이어야 하므로, 가급적 Solution.java 를 사용할 것을 권장합니다.
   이러한 상황에서도 동일하게 java Solution 명령으로 프로그램을 수행해볼 수 있습니다.
 */
public class Solution
{
	public static void main(String args[]) throws Exception
	{
		//System.setIn(new FileInputStream("C:\\so_Project\\workspace\\BaekJoon\\src\\algorithm\\input.txt"));

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int T = Integer.parseInt(br.readLine()); //테스트 케이스
		
		for(int i=1;i<=T;i++) { //하나의 테스트케이스마다 반복
			int result = 0;
			int N = Integer.parseInt(br.readLine());
			int speed = 0; //현재속도
			for(int j=0;j<N;j++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				int ch = Integer.parseInt(st.nextToken());
				if(ch != 0) {
					int m_ss = Integer.parseInt(st.nextToken()); ///rc카 속도

					if(ch == 1) { //가속
						result += speed+m_ss;
						speed += m_ss;
					}
					else if(ch==2){ //감속
						if(speed < m_ss) {
							speed = 0;
							continue;
						}
						else {
							result += speed-m_ss;
							speed -= m_ss;
						}
					}
				}
				else { //현재속도 유지
					result += speed;
				}
			}
			System.out.println("#"+i+" "+result);
		}//하나의 테스트 케이스 끝
		
	}
}

'알고리즘 > Samsung' 카테고리의 다른 글

SW 1288. 새로운 불면증 치료법  (0) 2023.05.05
SW 1928. Base64 Decoder  (0) 2023.05.05
SW 1285. 아름이의 돌 던지기  (0) 2023.05.05
SW 1945. 간단한 소인수분해  (0) 2023.05.02
SW 1946. 간단한 압축 풀기  (0) 2023.05.02