코테/항해99

[99클럽 코테 스터디 6일차 TIL] #해시2

쪼성윤 2024. 11. 3. 01:22

코테 스터디를 시작하고 처음으로 맞이한 6일 차 주말! 알바 가기 전에 빠르게 풀어보자!

 

문제 설명


 

카드의 개수와 카드의 정보들이 주어지면, 이것이 종을 쳐야하는 상황인지를 확인하는 코드를 작성하는 문제이다.

https://www.acmicpc.net/problem/27160

 

 

생각 흐름


우선, 문제를 이해하는 것은 쉬웠다. 할리갈리 게임을 많이 해보았었기 때문에 게임의 규칙대로 확인할 수 있는 코드를 짜면 되는 것이었다.

 

4개의 과일밖에 존재하지 않기 때문에 각각의 문자열과 정수가 들어왔을 때 문자열대로 정수를 더해준 다음 이것의 합이 5인지를 확인하는 코드를 작성하면 되겠다는 생각을 하였다.

 

우선 map 함수를 공부했었기 때문에 먼저 생각했었던 것 같다.

마침 string과 int 타입이 들어오기 때문에 이러한 자료형들을 저장할 map을 선언해 놓고 풀어보기로 하였다.

 

정수 n을 받아 n번만큼 for문을 돌려, map에 과일 문자열 하나당 들어오는 a 정수만큼 더해 저장해 주었다.

각각의 과일 문자열이 나온 횟수를 저장하는 것은 성공했으니

 

이제 조건문을 쓰면 될 것이다.

음.. 어떠한 과일이든 5개가 나오면 종을 치면 되니까 if, else if 구문으로 쭉 나열해서 써주었다.

bool 타입의 변수를 선언하여 5개 나오면 true 해서 "YES" 출력, 안 나오면 false 해서 "NO" 출력이 나오게 하여 마무리하였다.

 

#include <iostream>
#include <map>

using namespace std;

int main(){
    int n;
    cin>>n;
    map<string,int> mp;
    for(int i = 0;i<n;i++){
        string s;
        int a;
        cin>>s>>a;
        mp[s] += a;
    }

    bool answer = false;

    if(mp["STRAWBERRY"] == 5){
        answer = true;
    }
    else if(mp["BANANA"] == 5){
        answer = true;
    }
    else if(mp["LIME"] ==5){
        answer = true;
    }
    else if(mp["PLUM"] == 5){
        answer = true;
    }

    cout<< (answer ? "YES" : "NO")<<endl;
    
    return 0;
}

 

 

공부한 내용 정리


1. 조건부 연산자 '?'을 이용한 if 문

 

조건 연산자는 C++에서 인수 세 개를 받는 유일한 삼항 연산자입니다.

이 연산자는 [조건]? [동작 1] : [동작 2]로 표현되는데 [조건]을 만족하면 [동작 1]을 수행하고, 그렇지 않으면 [동작 2]를 수행합니다.

 

std::cout << ((i > 2) ? "yes" : "no"); 

 

(i가 2보다 크면?  yes 아니면 no)

 

이 조건문은 알아두면 편한 조건문이라 다시 한번 공부하는 겸 복기하는 식으로 적어보았습니다.

 

 

오늘문제는 map의 특성을 아니까 조건이 까다롭지 않은 비교적 쉬운 문제였어서 이만큼 하고 넘어가겠습니다.