프로그래머스 핸드폰 번호 가리기 문제

2026. 3. 18. 16:54Programmers

문제는 다음과 같다.

 

이 문제를 풀 때 주어진 기본 코드는 아래와 같았다.

 

여기서 포인트는

1. 동적할당

2. 문자열의 길이

3. *로 변환

이렇게 짚고 코드를 작성했다.

 

작성한 코드는 다음과 같다.

오답코드

이게 처음에 작성했던 코드이다.

 

당연히 오류가 나서 오답처리였다.

 

오류가 날 부분들을 되짚어 봤다.

 

오답노트

첫번째

strcpy(answer[i], '*');

strcpy는 문자열 전체를 복사하는 함수이다.

strcpy(목적지문자열, 원본문자열);

strcpy는 이런 형태로 사용해야한다.

 

하지만 내가 복사하려 했던 것은 answer[i]로, 문자 1칸이다. ' * ' 또한 문자 1개이다.

 

그래서 이 문법은 잘못된 문법이다.

 

이 부분은 문자 한 개를 대입해서 풀어야 했다.

 

고친 후 코드는 다음과 같다.

       strcpy(answer[i], '*');
       
       >> answer[i] = '*';
       
       strcpy(answer[i], phone_number[i]);
       
       >> answer[i] = phone_number[i];

 

 

두 번째

문자열 끝 표시가 없다.

 

C에서는 문자열의 마지막에 반드시 '\0'이 있어야 한다.

 

전화번호 길이가 만약 11이라면 문자 11개 + ' \0 ' 1개 해서 총 12칸이 필요하고 마지막은 ' \0 ' 으로 바꿔줘야 한다. 그렇지 않으면 이상한 값이 출력된다.

 

예상하던 숫자 후에 알 수 없는 값이 출력되는 모습이다. 따라서 마지막에

 

answer[len] = '\0';

다음과 같이 끝 표시를 해주는 것이다.

 

세 번째

malloc(12)로 고정하면 번호에 따라 바뀌는 것이 아닌 최대 숫자로 고정하는 것이다.

 

그래서 번호에 따라 메모리의 할당을 다르게 할 수 있도록

 

char* answer = (char*)malloc(12);

---------------------------------
int len = strlen(phone_number);
char* answer = (char*)malloc(len + 1);

이런식으로 바꿔, 번호가 짧으면 그 만큼 적은 메모리를 할당할 수 있도록 했다.

 

이렇게 변경한 후 정상적으로 작동하는 모습을 볼 수 있다.