Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Jinny Kong’s blog

18th Koala 3주차 본문

KOALA

18th Koala 3주차

Jinny Kong 2025. 4. 6. 18:36

드디어 3주차를 완료했다!! 오예 ~ (●ˇ∀ˇ●)

 

특히 이번주차는 시간이 오래 걸렸다...

 

내가 주로 작성하는 코드들로 풀기에는 어려움이 있어서 처음 사용해보는 함수나 클래스가 많았다. 

 

그래서 따로 노션 페이지를 만들어서 새롭게 배운 함수들의 문법을 보기 좋게 정리해 놓았다 ㅎㅎ

 

ദ്ദി´-ω-`) -->  https://www.notion.so/3-1cdc1d27d1be80bb9cc1db06a3d99e0d  

 

2주차 까지는 모르는 부분이 있어도 코드풀때만 참고하고 따로 정리해놓지 않아서 계속 검색하고 까먹고의 연속이었는데 확실히 정리해놓니까 그때그때 찾아보면서 내껄로 만들 수 있을 것 같아서 좋은 것 같다! (▰˘v˘▰)

 

3주차 문제집을 풀면서 열심히 정리해놔서 그런지 모의테스트에서는 단 한번도 함수 문법을 참고하지 않고 혼자 힘으로 풀 수 있어서 뿌듯했다!! 그래서 오늘은 테스트 문제 중 한 문제에 대해 정리해보려 한다 ( *˘⌣˘)◞⁽⁽

 

백준 7785번 : 회사에 있는 사람

 

 

 

어떤 사람이 회사에 들어왔는지, 나갔는지가 기록된 로그를 입력받고, 이 로그를 바탕으로 현재 회사 안에 있는 사람의 이름을 사전 역순으로 출력하는 문제였다. 

 

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
    
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    
    int n;
    cin >> n;
    string name, status;
    vector<string> names;
    
    map<string, bool> myMap;
    
    for(int i = 0; i < n; i++)
    {
        cin >> name >> status;
        
        if(status == "enter")
            myMap[name] = true;
        else if(status == "leave")
            myMap[name] = false;
    }
    
    for(const auto& entry : myMap)
    {
        if(entry.second)
            names.push_back(entry.first);
    }
    
    sort(names.begin(), names.end());
    reverse(names.begin(), names.end());
    
    for(string s: names)
        cout << s << "\n";
    
    
}

 

name과 status 두 가지를 입력받는데 아무래도 입력요소가 2가지이다 보니 맵을 쓰는 것이 편리할 것이라 생각했다!!

 

그래서 string, bool타입의 맵을 생성했다. key값에는 name을, value값에는 boolean 타입의 도움을 받아서 해당 사람의 상태가 enter이면 true, leave이면 false를 할당하도록 코드를 짰다.

 

true --> 회사 안에 있음

false --> 회사 안에 없음

 

또한 할당받은 맵을 for문으로 순회하면서 value값이 true일때 (즉, 해당하는 사람이 회사 안에 있을 때) 해당 사람의 이름인 key값을 names라는 벡터에 저장하도록 했다.

 

마지막으로, 벡터에 저장된 이름들을 사전 반대식으로 출력하기 위해 sort함수 -> reverse함수를 사용해서 내림차순 정렬해주었다!!

 

모의테스트를 풀면서 꼭 한번씩은 틀렸던 것 같은데 이번에는 정답~!! ¡¡¡( •̀ ᴗ •́ )و!!! 헤헤

 

조금 더 효율적으로 풀 수 있을까 해서 더 찾아봤는데 내림차순 정렬 부분을 이렇게 greater<>를 사용하면  reverse()함수를 생략할 수 있고 코드 가독성도 더 높일 수 있다고 한다!! 또한 모든 STL 정렬함수에 사용할 수 있다고 하니 이 부분도 꼭 기억해두면 좋을 것 같다(๑•͈ᴗ•͈)

 

sort(names.begin(), names.end(), greater<string>());

 

 

 

저번 주차에는 너무 1차원적으로 생각하고 틀린 문제들이 많았는데 이번에는 한번 더 생각하고 문제를 푸니까 확실히 틀리는 문제들이 적었던 것 같아서 뿌듯했다! 문제를 많이 풀수록 몰랐던 함수나 트릭에 익숙해져 가는 것 같아서 정말 많이 도움이 된다고 느끼는 중이다ㅎㅎ

 

코알라를 하면 미루다가 항상 하루를 다 쓸만큼 시간을 쏟는데, 다음주차 부터는 평일에도 조금씩 미리 해두면 좋을 것 같다!! 

 

3주차 끗~~!! (〜^∇^)〜

'KOALA' 카테고리의 다른 글

18th Koala 7주차  (1) 2025.05.18
18th Koala 5주차  (1) 2025.05.04
18th Koala 4주차  (2) 2025.04.13
18th Koala 2주차  (1) 2025.03.30
18th Koala 1주차  (0) 2025.03.23