기록 보관소

[프로그래머스] Lv.1 문제 PART 2(C++) 본문

코딩 테스트/프로그래머스

[프로그래머스] Lv.1 문제 PART 2(C++)

JongHoon 2024. 5. 2. 23:25

프로그래머스 코딩 테스트 : Lv.1 문제(C++)

https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&page=1&languages=cpp&levels=1

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr


프로그래머스 Lv.1 문제 : 자연수 뒤집어 배열로 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/12932?language=cpp

 

프로그래머스

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

programmers.co.kr


문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.

예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.


제한사항

  • n은 10,000,000,000이하인 자연수입니다.

입출력 예

입출력 예


코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(long long n) {
    vector<int> answer;
    
    while(n != 0) {
        answer.push_back(n % 10);
        n /= 10;
    }
    
    return answer;
}

결과


프로그래머스 Lv.1 문제 : 정수 내림차순으로 배치하기

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

 

프로그래머스

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

programmers.co.kr


문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다.

n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.

예를들어 n이 118372면 873211을 리턴하면 됩니다.


제한사항

  • n은 1이상 8000000000 이하인 자연수입니다.

입출력 예

입출력 예


코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

long long solution(long long n) {
    long long answer = 0;
    vector<int> temp;
    
    while (n != 0) {
        temp.push_back(n % 10);
        n /= 10;
    }
    
    sort(temp.begin(), temp.end(), greater<int>());
    
    answer = temp[0];
    for (int i = 1; i < temp.size(); i++) {
        answer *= 10;
        answer += temp[i];
    }
    
    return answer;
}
// 다른 사람의 풀이 : string으로 변환 후 정렬해서 해결하는 방법

#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

long long solution(long long n) {
    long long answer = 0;

    string str = to_string(n);
    sort(str.begin(), str.end(), greater<char>());
    answer = stoll(str);

    return answer;
}

결과


프로그래머스 Lv.1 문제 : 정수 제곱근 판별

https://school.programmers.co.kr/learn/courses/30/lessons/12934?language=cpp

 

프로그래머스

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

programmers.co.kr


문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.

n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.


제한사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>
#include <cmath>

using namespace std;

long long solution(long long n) {
    if (pow((long long)sqrt(n), 2) == n)
        return pow(sqrt(n) + 1, 2);
    else
        return -1;
}
// 다른 사람의 풀이 : 조금 더 간단하게 해결하는 방법

#include <string>
#include <vector>
#include <math.h>
using namespace std;

long long solution(long long n) {
    long long answer = sqrt(n);

    return powl(answer, 2) == n ? powl(answer + 1, 2) : -1;
}

결과


여담

마지막 문제는 형 변환 때문에 한번 실패했다. 이후 질문하기를 참고하고 이 문제를 인지해서 다시 시도해 해결했다.