1 분 소요

이번 30일 코딩테스트를 대비하여 마치 시험치듯이
프로그래머스에 있는 스킬체크레벨 단계별로 풀어보기로 하였다.
부정행위 감지한다는 문구가 있어 도중에 스샷은 찍진 못했지만 기억나는대로 문제를 적어보겠다.

Question 1

입력 n이 주어진다.
n이 3이면 “수박수”, 4면 “수박수박” 과 같은 패턴으로 출력된다.
n은 10000이하의 자연수이다.


Solution 1

  • 입력값을 for에서 홀수와 짝수로 나눈다.
  • string arr[] = {“박”, “수”}; 를 선언하여 홀수면 “수”, 짝수면 “박” 을 answer에 더해주었다.

Cord 1

#include <string>
#include <vector>

using namespace std;

string arr[2] = {"박", "수"};

string solution(int n) {
    string answer = "";
    for(int i = 1; i <= n; i++)
    {
        int temp = i % 2;
        answer += arr[temp];
    }

    return answer;
}

처음엔 char 배열에 한글을 넣었지만 자꾸 크기에러가 나서 string으로 선언했더니 되었다.
한글의 크기와 알파벳의 크기가 다르다는것을 알게되었다.


Question 2

숫자 배열이 주어지고 이 배열에서 중복되지 않는 인덱스로 숫자 두개를 뽑아 만들 수 있는
모든 수를 배열에 넣고 오름차순으로 출력하라.


Solution 2

  • 이중 for문으로 입력으로 주어지는 배열에서 중복되지 않도록 숫자를 고른다.
  • 모든 숫자에 대해 덧셈을 실시하도록 하고 결과 값을 배열에 넣는다.
  • 나는 유니크 메서드를 쓰는 법을 까먹어 따로 중복검사를 하고 나서 배열에 넣었다…

Cord 2

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

using namespace std;

 vector<int> answer;

bool checkDuple(int sum)
{
    for(int k = 0; k < answer.size(); k++)
    {
        if (sum == answer[k]) 
        { 
            return true;
        }
    }
    return false;
}

vector<int> solution(vector<int> numbers) { 
    for(int i = 0; i < numbers.size(); i++)
    {
        for(int j = i + 1; j < numbers.size(); j++)
        {
            int sum = numbers[i] + numbers[j];

            // 중복 검사
            if (!checkDuple(sum))
            {
                answer.push_back(sum);
            }
        }
    }

    // 오름차순 정렬
    sort(answer.begin(), answer.end());
    return answer;
}

Result

Result