cospro 2급 6번 문제
엘리베이터의 총 이동거리 구하기
문제설명
하루 동안 엘리베이터가 멈춘 층이 순서대로 들어있는 배열이 있다.
이때, 엘리베이터의 총 이동거리를 구하려 한다.
단, 층과 층 사이의 거리는 1이다.
예를 들어 배열에 [1, 2, 5, 4, 2]가 들어있다면, 엘리베이터가 이동한 거리는 7이다.
하루동안 엘리베이터가 멈춰 선 층이 순서대로 들어있는 배열 flooors와 floors의 길이 floors_len이 매개변수로 주어질 때, 엘리베이터의 총 이동거리를 return하는 solution함수를 완성한다.
매개변수 설명
하루동안 엘리베이터가 멈춰 선 층이 순서대로 들어있는 배열 flooors와 floors의 길이 floors_len이 매개변수로 주어진다.
floors_len은 2 이상 100 이하의 자연수이다.
floors의 원소는 1 이상 100 이하의 자연수이며, 인접한 두 원소의 값이 같은 경우는 없다.
floors의 첫번째 원소는 엘리베이터의 처음 위치를 나타낸다.
return 값 설명
엘리베이터의 총 이동 거리를 return한다.
예시
예시 설명
엘리베이터는 처음에 1층에 있으며, 다음 순서대로 움직였다.
1층 - 2층 - 5층 - 4층 - 2층
층과 층 사이의 거리는 1이므로, 엘리베이터가 이동한 거리는 다음과 같다.
1층 - 2층 (이동거리 : 1)
2층 - 5층 (이동거리 : 3)
5층 - 4층 (이동거리 : 1)
4층 - 2층 (이동거리 : 2)
따라서 총 이동거리는 7이다.
코드설명
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int floors[], int floors_len) {
int dist = 0; //엘리베이터 이동거리
for(int i = 1; i<floors_len; ++i){
if(floors[i]>floors[i-1]) //만약 배열의 앞방이 뒷방보다 크면 i방 - (i-1)방을 해준다.
dist += floors[i] - floors[i-1];
else
dist += floors[i-1] - floors[i]; //1
//만약 배열의 뒷방이 앞방보다 크면 (i-1)방 - i방를해준다.
}
return dist;
}
int main() {
int floors[5] = {1, 2, 5, 4, 2};
int floors_len = 5;
int ret = solution(floors, floors_len);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}
보통 배열과 관련된 문제를 풀 때는 반복문의 시작을 0으로 잡는다. 그 이유는 배열의 시작 인덱스가 0이기 때문이다.
하지만 이 문제는 1부터 반복문을 시작한다. 왜냐하면 시작 할 때 0번방과 1번방을 비교하는게 아니라 1번방과 0번방을 비교하기 때문이다. 그래서 반복문의 시작을 0으로 하게 되면 0과 -1방을 비교한다. 이때 -1이라는 방은 존재하지 않기 때문에 에러가 난다.
엘리베이터의 이동거리를 구하는 것은 음수가 나와선 안된다. 그래서 3층과 5층의 이동거리를 비교할 때 3-5가 아니라 5-3을 해준다. -2이라는 이동거리는 존재하지 않는다. 따라서 더 큰 값이 앞으로 와야한다.
매개변수 설명을 보면 인접한 두 원소의 값은 같은 경우가 존재하지 않는다 라는 설명이 있다. 따라서 조건식에서는 크거나 같다가 아닌 크다만 체크해주면 된다.
'cospro2급 > cospro_2차' 카테고리의 다른 글
2021-05-11 (0) | 2021.05.11 |
---|---|
2021-05-11 (0) | 2021.05.11 |
2021-05-10 (0) | 2021.05.10 |
2021-05-09 (0) | 2021.05.09 |
2021-05-08 (0) | 2021.05.08 |