[C++] 22252번: 정보 상인 호석

2023. 7. 4. 19:38·[게임 개발] 알고리즘 공부/백준

링크

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

 

22252번: 정보 상인 호석

암흑가의 권력은 주먹과 정보에서 나온다. 주먹은 한 명에게 강하고, 정보는 세계를 가지고 놀 수 있기 때문에 호석이는 세상 모든 정보를 모으는 "정보 상인"이 되고 싶다. 정보 상인은 정보를

www.acmicpc.net

문제

암흑가의 권력은 주먹과 정보에서 나온다. 주먹은 한 명에게 강하고, 정보는 세계를 가지고 놀 수 있기 때문에 호석이는 세상 모든 정보를 모으는 "정보 상인"이 되고 싶다. 정보 상인은 정보를 사고파는 사람을 의미한다.

호석이는 아직 상인계의 새싹이기 때문에, 초기 투자를 통해서 여러 명의 "정보 고릴라"들로부터 정보를 모으려고 한다. 정보 고릴라란 여기저기서 정보를 수집하는 사람들을 의미한다. 일단 정보를 긁어모으기 위해서 호석이는 여러 정보 고릴라들에게 정보를 구매하려고 한다.

 

입출력 예제

예제 입력 1 복사
7
1 Cpp 5 10 4 2 8 4
1 Java 2 8 2
2 Cpp 2
1 Cpp 2 10 3
2 Cpp 3
2 Java 1
2 Python 10
예제 출력 1 복사
44

코드

#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <queue>
#include <algorithm>

using namespace std;

int main(void)
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	unordered_map<string, priority_queue<int>> info;
	int n;
	long long result = 0;

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		int choice;
		int num;
		string name;

		cin >> choice >> name >> num;

		// 1 입력 받으면 정보상이 가진 정보 업데이트
		if (choice == 1)
		{
			for (int j = 0; j < num; j++)
			{
				int temp;
				cin >> temp;
				info[name].push(temp);
			}
		}

		// 2 입력 받으면 정보상이 가진 정보중 비싼 정보부터 구입
		else if (choice == 2)
		{
			if (info.find(name) == info.end())	continue; // 예외처리

			while (num-- && !info[name].empty())
			{
				result += info[name].top();
				info[name].pop();
			}
		}

	}

	cout << result << "\n";
	return 0;
}

풀이

  • unordered_map과 우선순위 큐를 사용하여 풀었다.
  • 처음엔 큐 대신 vector를 사용하여 sort로 내림차순 정렬하려 했지만 시간초과가 발생했다.
  • queue와 priority_queue가 다른점은 큐는 FIFO형식으로 나오지만,
    우선순위 큐는 들어간 순서에 상관없이 우선순위가 높은 순으로 나온다.
    기본적으로 내림차순 정렬이며 greater로 오름차순, less로 내림차순을 나타낸다.
    (오름차순으로 사용 시 priority_queue<int, vector<int>,  greater<int>>와 같이 사용)
  • 2번 입력 반복문에서 예외처리 조건을 while문 조건검사 안에 넣었다.
    for문을 사용하여 if로 예외처리 검사를 하니 시간초과가 나왔다.
저작자표시 (새창열림)

'[게임 개발] 알고리즘 공부 > 백준' 카테고리의 다른 글

[C++] 4358번: 생태학  (0) 2023.07.06
[C++] 27396번: 문자열 변환과 쿼리  (0) 2023.07.05
[C++] 22233번: 가희와 키워드  (0) 2023.07.04
[C++] 16165번: 걸그룹 마스터 준석이  (0) 2023.07.03
[C++] 13414번: 수강신청  (0) 2023.06.30
'[게임 개발] 알고리즘 공부/백준' 카테고리의 다른 글
  • [C++] 4358번: 생태학
  • [C++] 27396번: 문자열 변환과 쿼리
  • [C++] 22233번: 가희와 키워드
  • [C++] 16165번: 걸그룹 마스터 준석이
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      데드락
      context switching
      슬라이딩 윈도우
      참조자
      그리디
      해시
      누적합
      프로세스
      우선순위 큐
      dfs
      문자열
      스레드
      브루트포스
      dp
      역참조
      메모리구조
      투포인터
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    [C++] 22252번: 정보 상인 호석
    상단으로

    티스토리툴바