본문 바로가기

cospro2급/cospro_2차

2021-05-10

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이라는 이동거리는 존재하지 않는다. 따라서 더 큰 값이 앞으로 와야한다.

매개변수 설명을 보면 인접한 두 원소의 값은 같은 경우가 존재하지 않는다 라는 설명이 있다. 따라서 조건식에서는 크거나 같다가 아닌 크다만 체크해주면 된다.

 

 

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

'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