• 문제 설명

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 배열 arr에서 제거되고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다.
예를들면

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1]을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3]을 return 합니다.

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

  • 제한사항
  • 배열 arr의 크기 : 1,000,000 이하의 자연수
  • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
  • 입출력 예

  • 내가 만든 코드
#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    vector<int> answer;
    for(int i = 1; i<arr.size(); i++){
        if(arr[i]==arr[i-1]){
            continue;
        }
        else{
            answer.push_back(arr[i-1]);
        }
    }
    answer.push_back(arr[arr.size()-1]);
    return answer;
}
  • 코드 채점 결과

  • 처음에는 arr자체에서 중복되는 값들을 비워내는 형식으로 진행했었다.
  • 물론 정확성 테스트는 모두 통과를 했으나 효율성에서 시간 초과가 나와 다시 한번 생각해보았다.
  • 다시 생각해낸 방법은 비어있는 vector에 중복되는 값을 push 해주는 방식이었다.
  • 이 방식을 사용하니 훨씬 더 빨리 테스트를 마칠 수 있었다.

'프로그래머스' 카테고리의 다른 글

level 1 - 가운데 글자 가져오기(100/100)  (0) 2019.04.05
level 1 - 2016년(100/100)  (0) 2019.04.02
level 2 - 주식가격(100/100)  (0) 2019.04.01
level 2 - 기능개발(90/100)  (0) 2019.04.01
level 2 - 탑(100/100)  (0) 2019.03.31
  • 문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

  • 제한사항
  • s는 길이가 1 이상, 100이하인 스트링입니다.
  • 입출력 예

  • 내가 만든 코드
#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    if(s.size()%2==1){
        return s.substr(s.size()/2,1);
    }
    else if(s.size()%2==0){
        return s.substr(s.size()/2-1,2);
    }
}
  1. 주어진 string의 길이가 홀수이면 가운데 한 글자만 return
  2. 주어진 string의 길이가 짝수이면 size()/2 - 1에서 2글자 return
  • 코드 채점 결과

 

'프로그래머스' 카테고리의 다른 글

level 1 - 같은 숫자는 싫어(100/100)  (0) 2019.04.05
level 1 - 2016년(100/100)  (0) 2019.04.02
level 2 - 주식가격(100/100)  (0) 2019.04.01
level 2 - 기능개발(90/100)  (0) 2019.04.01
level 2 - 탑(100/100)  (0) 2019.03.31
  • 문제 설명
  • 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a , b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 TUE를 반환하세요.
  • 제한 조건
  • 2016년은 윤년입니다.
  • 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일 같은 날짜는 주어지지 않습니다)
  • 입출력 예

  • 내가 만든 코드
#include <string>
#include <vector>

using namespace std;

string solution(int a, int b) {
    string answer[] = {"THU","FRI","SAT","SUN","MON","TUE","WED"};
    int month[] = {31,29,31,30,31,30,31,31,30,31,30,31};
    int sum = 0;
    
    for(int i = 0; i<a-1; i++){
        sum += month[i];
    }
    sum += b;
    return answer[sum%7];
}
  1. 1월 1일이 금요일 이고 배열은 0번째부터 시작이므로 1번째의 day값을 금요일로 맞춰서 저장해 놓았다.
  2. 1~12월까지의 총 일수를 배열에 저장한다.
  3. 만약 5월 24일이라면 배열상으로 3번째(4월)까지의 일수를 더한 후 나머지 24일을 더하여 총일수를 구한다.
  4. 모두 더한 값을 7로 나누고 나머지값을 요일이 저장되어있는 answer배열에 넣으면 답이 나온다.
  • 코드 채점 결과

 

  • 문제 설명 : 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

    예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

    1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
    2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
    3. 2에서 나온 배열의 3번째 숫자는 5입니다.

    배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

  • 제안사항
  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.
  • 입출력 예

arraycommandsreturn
[1, 5, 2, 6, 3, 7, 4][[2, 5, 3], [4, 4, 1], [1, 7, 3]][5, 6, 3]

  • 입출력 예 설명
[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.
  • 내가 만든 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    vector<int> tmp;
    for(int i = 0; i < commands.size(); i++){
        for(int j = commands[i][0- 1; j < commands[i][1]; j++){
            tmp.push_back(array[j]);
        }
        sort(tmp.begin(),tmp.end());
        answer.push_back(tmp[commands[i][2- 1]);
        tmp.clear();
    }
    return answer;
}
cs
  • 코드 채점 결과



  • 문제 설명 : 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

    1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
    2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
    3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

    1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

  • 제한 조건
  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
  • 입출력 예
answersreturn
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]
  • 입출력 예 설명
  • 입출력 예 #1
  • 수포자 1은 모든 문제를 맞혔습니다.
  • 수포자 2는 모든 문제를 틀렸습니다.
  • 수포자 3은 모든 문제를 틀렸습니다.

따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.

  • 입출력 예 #2
  • 모든 사람이 2문제씩을 맞췄습니다.
  • 내가 만든 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <string>
#include <vector>
 
using namespace std;
 
vector<int> solution(vector<int> answers) {
    vector<int> answer;
    int ans1[5= {1,2,3,4,5};
    int ans2[8= {2,1,2,3,2,4,2,5};
    int ans3[10= {3,3,1,1,2,2,4,4,5,5};
    int cnt[3= {0,0,0};
    int max = 0;
    
    for(int i = 0; i < answers.size(); i++){
        if(answers[i] == ans1[i%5]){
            cnt[0]++;
        }
        if(answers[i] == ans2[i%8]){
            cnt[1]++;
        }
        if(answers[i] == ans3[i%10]){
            cnt[2]++;
        }
    }
    
    for(int j = 0; j < 3; j++){
        if(cnt[j]>max){
            max = cnt[j];
        }
    }
    
    for(int z = 0; z < 3; z++){
        if(cnt[z] == max){
            answer.push_back(z+1);
        }
    }
    return answer;
}
cs
  • 코드 채점 결과


  • 문제 설명 : 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
  • 제안사항
  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.
  • 입출력 예
participantcompletionreturn
[leokikieden][edenkiki]leo
[marinajosipanikolavinkofilipa][josipafilipamarinanikola]vinko
[mislavstankomislavana][stankoanamislav]mislav
  • 입출력 예 설명
  • leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
  • vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
  • mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
  • 내가 만든 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
string solution(vector<string> participant, vector<string> completion) {
    string answer = "";
    
    sort(participant.begin(),participant.end());
    sort(completion.begin(),completion.end());
    
    for(int i = 0; i < completion.size() ;i++){
        if(participant[i].compare(completion[i]) != 0){
            answer = participant[i];
            break;
        }
        else if(i == completion.size()-1){
            answer = participant[i+1];
        }
    }
    return answer;
}
cs
  • 코드 채점 결과


+ Recent posts