Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/프로그래머스

    [프로그래머스] 완주하지 못한 선수

    2020. 11. 23.

    by. Hyeon-Uk

    반응형

    programmers.co.kr/learn/courses/30/lessons/42576

     

    코딩테스트 연습 - 완주하지 못한 선수

    수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

    programmers.co.kr


    문제풀이)

    먼저 두 벡터 participant와 completion을 정렬을 해줍니다.

    정렬을 해준뒤, 처음인덱스부터 completion의 사이즈까지 탐색을 하며, 다른부분이 생긴다면 해당 인덱스의 participant원소를 answer에 넣어주고, 끝까지 돌았는데도 모두 같다면, participant의 마지막 원소가 answer가된다.

     

    ex) participant=["A","C","E","D","G"] / completion=["A","G","C","E"]

    정렬 결과 participant=["A","C","D","E","G"] / completion=["A","C","E","G"]

    for문을 돌리면 2번째 인덱스 "D"와 "E"가 다르기 때문에 완주하지 못한 선수는 "D"가 된다.

     

    #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());
        int size=completion.size();
        for(int i=0;i<size;i++){
            if(participant[i]!=completion[i]){
                answer=participant[i];
                break;
            }
        }
        if(answer==""){
            answer=participant[size];
        }
        return answer;
    }

    <map을 이용한 방법>

    <name,num>형식으로 completion안의 원소들을 넣는다. 처음넣을땐 num=1로, 동명이인이 나올땐 num++하는 방식으로 넣어준 뒤, participant를 돌며 해당이름이 맵에 없으면 그 이름이 answer, 있다면 해당 이름의 num을 1감소시킨다. 만약 감소시키고 음수로 떨어지게 되면 해당 이름이 answer가 된다.

     

    #include <string>
    #include <vector>
    #include<algorithm>
    #include<unordered_map>
    using namespace std;
    
    string solution(vector<string> participant, vector<string> completion) {
        string answer = "";
        unordered_map<string,int> um;
        for(auto c:completion){
            if(um.find(c)==um.end())    um.insert(make_pair(c,1));
            else um[c]++;
        }
        for(auto c:participant){
            if(um.end()==um.find(c)){
                answer=c;
                break;
            }
            else{
                um[c]--;
                if(um[c]<0){
                    answer=c;
                    break;
                }
            }
        }
        return answer;
    }
    반응형

    '문제풀이 > 프로그래머스' 카테고리의 다른 글

    [프로그래머스] 가운데 글자 가져오기  (0) 2020.11.24
    [프로그래머스] 2016년  (0) 2020.11.24
    [프로그래머스] K번째수  (0) 2020.11.24
    [프로그래머스] 체육복  (0) 2020.11.24
    [프로그래머스] 모의고사  (0) 2020.11.23

    댓글

    관련글

    • [프로그래머스] 2016년 2020.11.24
    • [프로그래머스] K번째수 2020.11.24
    • [프로그래머스] 체육복 2020.11.24
    • [프로그래머스] 모의고사 2020.11.23
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바