난이도 : D2
문제번호 : 1940
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
RC (Radio Control) 카의 이동거리를 계산하려고 한다. |
예제
아래 예제 입력에서 정답은 3 이 된다. 입력 시간 RC 카의 속도 RC 카의 이동거리 1 2 1 sec 2 m/s 2 m 2 1 2 sec 1 m/s 3 m |
제약사항
1. N은 2이상 30이하의 정수이다. (2 ≤ N ≤ 30) 2. 가속도의 값은 1 m/s2 혹은 2 m/s2 이다. 3. 현재 속도보다 감속할 속도가 더 클 경우, 속도는 0 m/s 가 된다. |
입력
입력은 첫 줄에 총 테스트 케이스의 개수 T, 다음 줄부터 각 테스트 케이스가 주어진다. 테스트 케이스 첫 줄에는 Command 의 수 N이 주어지고, 둘째 줄부터, 매 줄마다 각각의 Command가 주어진다. |
출력
테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다. (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.) |
예시
입력 | 출력 |
10 |
#1 3 #2 4 ... |
2. 문제풀이
저는 무식해서 그런지 물리법칙을 생각안했는데 많은 분들이 물리법칙까지 고려해서 문제를 푸셨다가 틀리셨더라구요.
저는 그냥 나온데로 구현을 했습니다. 명령이 0인 경우는 추가적인 작업을 하지않고 현재속도를 거리에 더했습니다. 명령이 1인 경우 가속이며 속도를 입력받고 현재속도에 더해주었습니다. 이후 거리에 현재속도를 더해주었습니다. 명령이 2인경우 감속이며 속도를 입력받고 현재 속도에서 빼주었습니다. 속도가 음수로 갈경우 0을 처리해주었습니다. 마찬가지로 거리에 현재속도를 더해주었습니다. 모든입력이 끝날때까지 반복하고 누적한 거리를 출력합니다. |
3. 소스코드
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
29
30
31
32
33
34
35
36
37
38
|
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//1940 D2 가랏! RC카!
int main() {
//전체 반복횟수 입력받고 반복
int len, len2;
cin >> len;
for (int l = 1; l <= len; l++) {
//명령횟수만큼 반복
cin >> len2;
//현재 스피트, 이동한거리, 가속도, 명령넘버(0유지, 1가속, 2감속)
int now_speed = 0, distance = 0, speed = 0, num = 0;
for (int l2 = 0; l2 < len2; l2++) {
cin >> num;
//0일경우 무시
if (!num) { }
//1일경우 가속
else if (num & 1) {
cin >> speed;
now_speed += speed;
}
//2일경우 감속
else {
cin >> speed;
now_speed -= speed;
//속도가 0보다 작아지면 0으로 변경
if (now_speed < 0)
now_speed = 0;
}
//거리에 이동속도 더하기
distance += now_speed;
}
cout << "#" << l << " " << distance << endl;
}
return 0;
}
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
아름이의 돌 던지기 C++(SW Expert Academy) (0) | 2020.02.17 |
---|---|
새로운 불면증 치료법 C++(SW Expert Academy) (0) | 2020.02.16 |
간단한 소인수분해 C++(SW Expert Academy) (0) | 2020.02.14 |
간단한 압축풀기 C++(SW Expert Academy) (0) | 2020.02.13 |
날짜 계산기 C++(SW Expert Academy) (0) | 2020.02.12 |
댓글