Note: 해당 알고리즘은 java로 풀이되었습니다.

문제 보기

문제 분석

RC카 문제는 난이도 D2답게 어렵지 않은 문제입니다.

문제에 나오는 RC카가 물리법칙을 벗어났다고 불만을 토로하는 사람이 더러 있는데
앞으로 풀 알고리즘은 대부분, 자연의 법칙들을 무시한 것이 많기 때문에 문제를 꼼꼼이 읽고 test case를 잘 분석하는 것이 필요합니다.
먼저 코드부터 보겠습니다.

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
	public static void main(String args[]) throws Exception
	{
	Scanner sc = new Scanner(System.in);
	int T;
	T=sc.nextInt();
	for(int test_case = 1; test_case <= T; test_case++)
	{
		int N=sc.nextInt();
		int sum=0;
		int v=0;
		for (int i = 0; i < N; i++) {
			int num=sc.nextInt();
			switch(num) {
			case 0:
				break;
			case 1:
				v+=sc.nextInt();
				break;
			case 2:
				v-=sc.nextInt();
				break;
			}
			if(v<0)	v=0;
			sum+=v;
		}
	System.out.println("#"+test_case+" "+sum);
	}
	}

쉬운 난이도답게 코드도 짧고 간단합니다.
그래도 쉽다고 방심하지 않고 꼼꼼이 살펴보겠습니다.

int v=0;

먼저 RC카의 속도값을 저장하는 정수 v를 선언합니다.
초기 속도는 0이니 0을 넣었고요.

int num=sc.nextInt();
switch(num) {
	case 0:
		break;
	case 1:
		v+=sc.nextInt();
		break;
	case 2:
		v-=sc.nextInt();
		break;
}

그 다음에는 두개의 숫자를 입력받게 됩니다.
첫 번째 숫자는 0,1,2를 입력받아서 속도유지,감속,가속을 알려주는데요.
첫 숫자를 num에 입력받아 switch합니다.

case 0: 속도유지면 아무 변화가 없습니다.
case 1: 가속이면 현재 속도 v에 가속되는 속도를 더합니다.
case 2: 감속이면 현재 속도 v에 감속되는 속도를 뺍니다.

if(v<0)	v=0;
sum+=v;
}
System.out.println("#"+test_case+" "+sum);

마지막으로 만약에 감속이 되어 현재 속도 v가 0보다 작아지게 된다면, 다시 0으로 맞춰줍니다.
이런 경우에 값이 음수가 되어 뒤로갈 수도, 0이 되어 멈출 수도 있으니 문제를 꼭 꼼꼼이 읽으셔야 모든 테스트 케이스에서 통과하실 수 있습니다.
그리고 RC카가 이동한 거리를 구해야 하는데, 중학교 때 거리=속력*시간 배우셨죠?
여기서는 시간 단위가 1초이기 때문에 거리=속력이 됩니다.
따라서 매 초마다 이동 거리 sum에 속력 v를 더하면 됩니다.

마지막으로 이 과정을 N번 반복 한 뒤에 sum을 출력하면 됩니다.

후기

저는 낮은 난이도를 보고 굉장히 쉽게 풀었지만 의외로 어렵게 풀다가 오래 걸리신 분들이 있었습니다.
현실 물리 법칙을 적용해서 속도가 서서히 올라가는 그래프를 계산하신 분들인데요.
쉬운 문제나, 어려운 문제나 문제의 조건을 반드시 꼼꼼히 읽고 테스트 케이스를 유심히 보는 것이 필요합니다.

만약 코드를 다운 받고 싶다면 공유한 깃허브에 접속해주세요.
오류 지적, 질문, 더 나은 풀이는 언제든지 메일이나 댓글로 부탁드립니다.
감사합니다.