학습(0)/C++ 문제풀이

프로그래머스.입문.외계행성 나이

누가 뭐래도 개발자 2025. 2. 17. 01:20

1. 1 = a... 9 = i 로 대응.

2. int를 받아 string 출력.

 

#include <string>
#include <iostream>

using namespace std;

string solution(int age) {
    //1. 문자열로 받는다.
    string str = to_string(age);
    string answer = "";

    //2.문자로 끊어 아스키 코드로 치환하여 출력한다. (보정값: +49)
    for (char c : str)
    {
        answer.push_back((int)c + 49);
    }

    return answer;
}

 

 

gemini

숫자를 자릿수로 끊어서 + '0' => 문자로 치환

생각만 하고 + '0' 기억안나서 포기했던 거였는데 역시 해보는 게 중요하다.

#include <iostream>
#include <string>

std::string solution(int age) {
    std::string answer = "";

    while (age > 0) {
        answer.push_back((age % 10) + '0'); // 10으로 나눈 나머지를 문자로 변환하여 추가
        age /= 10; // 10으로 나누어 다음 자릿수 계산
    }

    std::reverse(answer.begin(), answer.end()); // 문자열 뒤집기

    std::cout << answer << std::endl;

    return answer;
}

 

자바는 map으로 했었네.

 

왜 저리 복잡하게 했냐.

import java.util.HashMap;

class Solution {
    public static String solution(int age) {
        HashMap<Integer, String> mapping = new HashMap<>();

        mapping.put(0, "a");
        mapping.put(1, "b");
        mapping.put(2, "c");
        mapping.put(3, "d");
        mapping.put(4, "e");
        mapping.put(5, "f");
        mapping.put(6, "g");
        mapping.put(7, "h");
        mapping.put(8, "i");
        mapping.put(9, "j");

        if (age < 10) { //1자릿수인 경우
            return mapping.get(age);
        } else if (age < 100) { //2
            int carry = age / 10;
            int remainder = age % 10;

            return mapping.get(carry) + mapping.get(remainder);
        } else if (age < 1000) { //3
            int carry2 = age / 100;
            int remainder = age % 100;
            int carry1 = remainder / 10;
            remainder = remainder % 10;

            return mapping.get(carry2) + mapping.get(carry1) + mapping.get(remainder);
        } else {// 1000
            return "baaa";
        }
    }

}

 

 

cpp, java 속도 차이 보게