코테 스터디를 시작하고 처음으로 맞이한 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의 특성을 아니까 조건이 까다롭지 않은 비교적 쉬운 문제였어서 이만큼 하고 넘어가겠습니다.
'코테 > 항해99' 카테고리의 다른 글
[99클럽 코테 스터디 8일차 TIL] #해시4 (4) | 2024.11.04 |
---|---|
[99클럽 코테 스터디 7일차 TIL] #해시3 (7) | 2024.11.04 |
[99클럽 코테 스터디 5일차 TIL] #해시 (1) | 2024.11.01 |
[99클럽 코테 스터디 4일차 TIL] #문자열4 (1) | 2024.10.31 |
[99클럽 코테 스터디 3일차 TIL] #문자열3 (0) | 2024.10.30 |