본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.30] 내 절반이 여기에 있는가? / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 17.
반응형

내 절반이 여기에 있는가?


문제 설명

 

배열 원소인 자신을 2로 나눈 값이 배열에 있는 수의 개수를 구하려고 합니다. 

 

숫자가 담김 배열 arr과 arr의 길이 arr_len이 주어졌을 때, 자신을 2로 나눈 값이 배열에 들어있는 수가 몇 개인지 return 하는 solution함수를 작성했습니다. 

그러나, 코드 일부분이 잘못되어있기 때문에 올바르게 동작하지 않으므로 한 줄만 변경해서 올바르게 동작하도록 수정하세요.

 


예시

 

arr arr_len return
{4, 8, 3, 6, 3} 5 2

 


수정해야 할 코드

더보기
int solution(int arr[], int arr_len) {
    int answer = 0;
    for (int i = 0; i < arr_len; i++) 
        for (int j = 0; j < arr_len; j++) 
            if (arr[i]%2 == 0 && arr[i]/2 == arr[j]) {
                answer++;
                continue;
            }
    return answer;
}

 

수정

for (int j = 0; j < arr_len; j++) 
→ for (int j = 0; j < arr_len - 1; j++) 

j의 범위를 배열 마지막까지 한다면, arr[arr_len-1]을 할 때 arr[i]/2 == arr][j] 때 arr[j]가 쓰레기 값이 들어간다. 

 

코드 해석 및 전체 코드

 

answer ) 자신을 2로 나눈 값이 배열에 들어있는 수가 몇 개인지 return할 변수

 

for문 ) 0 ~ arr_len - 1까지 반복한다

for in for ) 0 ~ arr - 2까지 반복한다.

if문 ) arr[i]를 2로 나누었을 때 0일 때 arr[i] / 2과 arr[j]가 같으면 answer를 증가시킨다. 

&&는 하나라도 false면 모두 false이므로 두 조건 모두 만족해야 한다. 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int arr[], int arr_len) {
    int answer = 0;
    for (int i = 0; i < arr_len; i++)
        for (int j = 0; j < arr_len - 1; j++)
            if (arr[i] % 2 == 0 && arr[i] / 2 == arr[j]) {                
                answer++;
            }
    return answer;
}

int main() {
    int arr[] = { 4, 8, 3, 6, 3 };
    int arr_len = 5;
    int ret = solution(arr, arr_len);

    printf("solution 함수의 반환 값은 %d입니다.\n", ret);
}

cos pro 2급 기출문제

github

 

구름 goormedu COS PRO 2급 기출문제 - C언어

[3차] 문제10) 내 절반이 여기에 있는가?

반응형

댓글