티스토리 뷰

 

 

문제

하루 동안 엘리베이터가 멈춘 층이 순서대로 들어있는 배열이 있습니다. 이때, 엘리베이터의 총 이동거리를 구하려 합니다. 단, 층과 층 사이의 거리는 1입니다.

 

예를 들어 배열에 [1,2,5,4,2]가 들어있다면, 엘리베이터가 이동한 거리는 7입니다.

 

하루 동안 엘리베이터가 멈춰 선 층이 순서대로 들어있는 배열 floors와 floors의 길이 floors_len이 매개변수로 주어질 때, 엘리베이터의 총 이동 거리를 return하도록 solution함수를 작성하려 합니다.

빈칸을 채워 전체 코드를 완성해주세요.

 

 

 

 


 

 

 

 

 

주어진 코드

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int floors[], int floors_len) {
    int dist = 0;
    for(int i =     ;     ; ++i){ 			//빈칸
         if(     )					//빈칸
            dist += floors[i] - floors[i-1];
        else
            dist += floors[i-1] - floors[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);
}

 

예시

floors floors_len return
[1,2,5,4,2] 5 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])
            dist += floors[i] - floors[i-1];
        else
            dist += floors[i-1] - floors[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);
}

 

 

 

 

코드분석

단계 과정
main 각 이동한 층이 담겨있는 배열 floors와 그 길이를 정의한 후 solution함수를 호출한다.
solution 총 이동거리를 저장할 변수 dist를 선언한다.
solution - for 엘리베이터가 운행을 시작한 층은 이동거리를 구하지 않기 때문에, for문은 1부터 floors_len -1까지 반복한다.

출발한 층이 도착한 층보다 낮을때(올라갈때), 도착한 층에서 출발한 층을 빼 dist에 더한다.
반대로 출발한 층이 도착한 층보다 높을때(내려갈때), 출발한 층에서 도착한 층을 뺀 값을 dist에 더한다.

solution 총 이동거리인 dist를 return한다.
main 결과를 출력한 후 프로그램을 종료한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GroomEdu

 

goorm

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

www.goorm.io

 

 

 

 

댓글