[프로그래머스] 스킬 체크 테스트 Level 1

윤동환·2022년 12월 29일
0

1번

문제

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

제한 사항

s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

내가 작성한 코드

#include <string>

using namespace std;

bool solution(string s) {    
    int l = s.length();
    if (l != 4 && l != 6)
        return false;
    for (int i = 0; i < l; ++i) {
        if (s[i] > '9') {
            return false;
        }
    }
    return true;
}

문제의 키포인트

  • 문자열의 길이가 4이거나 6인지 체크한다.
  • 주어진 문자열에 특수문자는 없는 알파벳 혹은 숫자이므로 '0'이하의 경우는 고려할 필요가 없다.
  • 문자열의 길이를 for문 내에서 조건식에 넣으면 lentgh()를 계속 호출하므로 한번만 호출하도록 구성한다.

2번

문제

"명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니다. 즉 프로그램 시작 이후 초기에 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르게 됩니다. k일 다음부터는 출연 가수의 점수가 기존의 명예의 전당 목록의 k번째 순위의 가수 점수보다 더 높으면, 출연 가수의 점수가 명예의 전당에 오르게 되고 기존의 k번째 순위의 점수는 명예의 전당에서 내려오게 됩니다.

이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어, k = 3이고, 7일 동안 진행된 가수의 점수가 [10, 100, 20, 150, 1, 100, 200]이라면, 명예의 전당에서 발표된 점수는 아래의 그림과 같이 [10, 10, 10, 20, 20, 100, 100]입니다.
그림1.png
명예의 전당 목록의 점수의 개수 k, 1일부터 마지막 날까지 출연한 가수들의 점수인 score가 주어졌을 때, 매일 발표된 명예의 전당의 최하위 점수를 return하는 solution 함수를 완성해주세요.

제한 사항

3 ≤ k ≤ 100
7 ≤ score의 길이 ≤ 1,000
0 ≤ score[i] ≤ 2,000

내가 작성한 코드

#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(int k, vector<int> score) {
    vector<int> answer;
    vector<int> v;
    int len = score.size();
    if (len < k)
        k = len;
    for (int i = 0; i < k; ++i) {
        answer.push_back(score[i]);
        sort(answer.begin(), answer.end());
        v.push_back(answer[0]);
    }
    for (int i = k; i < len; ++i) {
        if (answer[0] < score[i]) {
            answer[0] = score[i];
            sort(answer.begin(), answer.end());
        }
        v.push_back(answer[0]);
    }
    return v;
}

문제의 키포인트

  • score의 size가 명예의 전당에 최대 담길 수 있는 개수 k보다 작을 때 for문을 더이상 돌리지 않도록 해야 한다.
  • k까지만큼은 모든 점수가 명예의 전당에 등록이 된다.
  • score에 수가 어떻게 담겨있더라도 명예의 전당에는 정렬되어서 들어간다.
  • 새로운 값이 제일 작은수보다 크다면 교체하고 정렬한다.
  • 그렇게 정렬된 vector의 가장 작은 수를 새로운 vector에 담아준다.

결과

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글