반응형
문제 설명
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.
제한사항
- age는 자연수입니다.
- age ≤ 1,000
- PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.
입출력 예
age | result |
23 | "cd" |
51 | "fb" |
100 | "baa" |
소스코드
Solution.c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
char* solution(int age) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
char* answer = (char*)malloc(sizeof(char)*4);
sprintf(answer, "%d", age);
for(int i=0; i<strlen(answer) ;i++)
answer[i] += 49;
return answer;
}
풀이
우선 이 문제를 풀기 전에 문제 설명을 이해해야 한다. a는 0, b는 1, c는 2라는 이야기가 나왔을 때 아스키코드를 떠올려야 한다. 아스키코드에서 a는 10 수로 나타냈을 때 97이고, 0은 48이다. 즉, 0에 49를 더해주면 a의 아스키코드 10진수가 나오게 된다. 이 방식을 이용하여 문제를 해결할 것이다. 또, 문제를 해결하기 위해서 sprintf 함수를 이용할 것이다. sprint 함수를 이용하면 정수를 문자열로 바꿀 수 있다. sprintf('넣어줄 변수', "%d", '정수')와 같은 형태로 해주면 된다. 위의 소스코드에서는 answer이라는 변수에 age를 문자열로 넣어준 것이다. 그다음 for문을 이용하여 문자열 하나하나 아스키코드를 생각하여 49씩 더 해주면 된다.
기존에 아스키코드와 sprintf 함수를 써보지 않았다면 아마 해결하기 힘들었을 것 같은 문제이다. 이번 기회에 sprintf 함수에 대해 다시 한번 떠올리게 된 좋은 계기였던 것 같다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr