본문 바로가기
프로그래밍/코딩테스트

[프로그래머스] 1레벨 문제

by Nessie! 2023. 5. 31.

자연수 뒤집어 배열로 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/12932

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

vector<int> solution(long long n)
{
    vector<int> answer;

    string str = to_string(n);

    answer.reserve(str.size());
    
    for (int i = str.size() - 1; i >= 0; i--)
        answer.push_back(str[i] - 48);   

    return answer;
}

string으로 변환해 아스키코드만큼 빼주는 방법을 이용했다.

 

나머지 계산으로 끝자리부터 하나씩 푸시백해주는 방법도 생각해봤으나 string에 익숙해지기 위해 string으로 풀어봤다.

 

 

서울에서 김서방 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/12919

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

string solution(vector<string> seoul) 
{
    int number = 0;

    for (int i = 0; i < seoul.size(); i++)
    {
        if (seoul[i] == "Kim")
            return "김서방은 " + to_string(i) + "에 있다";
    }
}

 

핸드폰 번호 가리기

https://school.programmers.co.kr/learn/courses/30/lessons/12948

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

string solution(string phone_number) {

    for (int i = 0; i < phone_number.size() - 4; i++)
        phone_number[i] = '*';

    return phone_number;
}

 

콜라츠 추측

https://school.programmers.co.kr/learn/courses/30/lessons/12943

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

int solution(int num) 
{
    if (num == 1)
    return 0;

    int answer = 0;
    int iTestNum = num;

    while (answer < 500)
    {
        answer++;

        if (iTestNum % 2 == 0)        //짝
        {
            iTestNum /= 2;

            if (iTestNum == 1)
                return answer;
        }
        else if(iTestNum % 2 == 1)
        {
            iTestNum = iTestNum * 3 + 1;
        }
    }

    return -1;
}

else문으로 작성했을 때에는 통과하지 못해 홀수인 경우를 아예 else if로 지정해주니 통과되었다.

 

이유를 찾아보니 오버 플로우가 일어나서 num % 2 == 0이 아니고, num % 2 == 1도 아닌 상황이 생겨 그렇다하는데

큰 수를 계산하다보면 중간에 곱하는 과정에서 계산값이 int형의 범위를 넘는경우가 발생해서 생기는 문제라고 볼 수 있다.

자료형 범위를 다 외우고 다녀야 할 지경이다ㅜㅜ..

댓글