본문 바로가기

c언어

[C언어 프로그래머스 레벨0]-진료 순서 정하기

728x90

문제 설명


외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

* 중복된 원소는 없습니다.
* 1 ≤ emergency의 길이 ≤ 10
* 1 ≤ emergency의 원소 ≤ 100


입출력 예

[emergency ] [ result ]
[3, 76, 24] [3, 1, 2]
[1, 2, 3, 4, 5, 6, 7] [7, 6, 5, 4, 3, 2, 1]
[30, 10, 23, 6, 100] [2, 4, 3, 5, 1]


입출력 예 설명


입출력 예 #1

emergency가 [3, 76, 24]이므로 응급도의 크기 순서대로 번호를 매긴 [3, 1, 2]를 return합니다.

입출력 예 #2

emergency가 [1, 2, 3, 4, 5, 6, 7]이므로 응급도의 크기 순서대로 번호를 매긴 [7, 6, 5, 4, 3, 2, 1]를 return합니다.

입출력 예 #3

emergency가 [30, 10, 23, 6, 100]이므로 응급도의 크기 순서대로 번호를 매긴 [2, 4, 3, 5, 1]를 return합니다.

[내 소스코드]

배열 이름이 너무 길어서 a로 바꿨고, 동적 할당은 calloc을 사용했다.

#include <stdio.h>



int* solution(int a[], size_t a_len) {

int* answer = (int*)calloc(1,sizeof(int)*100);
         int max=0,k=0; 
         int count=1; 
 
         for(int i=0;i<a_len;i++){
             for(int j=0;j<a_len;j++) {
             
             if(max<a[j]){ 
             max=a[j];
             answer[j]=count;
             k=j;
             }} 
             
             max=0;
             count++;
             a[k]=0; }
             
             return answer;
          }

멍청하게 배열++ 즉 answer[i]++ 를 몰라서 혼자 맘대로 풀었다. 제일 큰 값을 구해 answer배열에 1을 넣고
그 배열을 0으로 만든다음 그 다음으로 큰 값을 구해 2를 넣고.. 이런 식으로 풀었는데 위의 내용만 알았다면 금방 풀 문제였던 것이다..

수정한 [소스코드]


#include <stdio.h>
 
 
 int* solution(int a, size_t a_len) { 
 
 int* answer = (int*)calloc(1,sizeof(int)*100); 
 
          for(int i=0;i<a_len;i++){
          answer[i] = 1; 
                for(int j=0;j<a_len;j++){
                
                     if(a[i]<a[j]) 
                     answer[i]++;
                     
                     } } 
                return answer;
                
                }