강의로 돌아가기
이정훈

아니 챗지피티를 돌려도 틀린게 없는데요

저 c언어로 푸는데 제가 학원에서 배우는데 쌤도 뭐가 틀린지 몰라서 챗짚티에 돌렸더니 틀린 케이스가 없대요 뭐가 틀려요?

작성중인 코드―solution.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
int solution(const char* str1, const char* str2) {
    int i = 0;
    int j = 0;
    for(i = 0; i <= strlen(str1) - strlen(str2); i++){
        for(j = 0;j < strlen(str2); j++){
            // printf("i: %d(%c), j: %d(%c)\n", i+j, str1[i+j], j, str2[j]);
            if(str1[i + j] != str2[j]){

                break;
            }
        }
        if(j == strlen(str2)){
            return 1;
        }
    }
    return 2;
}

2 개의 답변
낙방여우

strlen은 반환값이 int타입이 아니라 size_t타입으로 unsigned int타입의 데이터 형식이라고 하네요. 그래서 size_t끼리의 연산값의 결과도 unsigned int타입이라서 결과가 음수가 나오면 언더플로우가 일어나 최댓값이 될 수 있어요.

간단한 코드가 예상과 다른 결과를 낸다면 기본부터 확인하는게 좋아요. 잘못알고 있는 기반지식 때문에 틀리는 경우도 있거든요.

김도현

str2의 길이가 str1의 길이보다 길 경우에 문제의 조건을 만족할 수 없으므로 바로 2를 반환할 수 있도록 조건문을 설정해주셔야 합니다.
1번 7번 케이스만 틀리다고 나오시면 이 부분 수정하시면 정답 나오실거에요

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.