[C++] 15904번: UCPC는 무엇의 약자일까?

2023. 7. 11. 21:27·[게임 개발] 알고리즘 공부/백준

링크

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

 

15904번: UCPC는 무엇의 약자일까?

첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는

www.acmicpc.net

문제

UCPC는 '전국 대학생 프로그래밍 대회 동아리 연합 여름 대회'의 줄임말로 알려져있다. 하지만 이 줄임말이 정확히 어떻게 구성되었는지는 아무도 모른다. UCPC 2018을 준비하던 ntopia는 여러 사람들에게 UCPC가 정확히 무엇의 줄임말인지 물어보았지만, 아무도 정확한 답을 제시해주지 못했다. ntopia가 들은 몇 가지 답을 아래에 적어보았다.

  • Union of Computer Programming Contest club contest
  • Union of Computer Programming contest Club contest
  • Union of Computer Programming contest club Contest
  • Union of Collegiate Programming Contest club contest
  • Union of Collegiate Programming contest Club contest
  • Union of Collegiate Programming contest club Contest
  • University Computer Programming Contest
  • University Computer Programming Club contest
  • University Computer Programming club Contest
  • University Collegiate Programming Contest
  • University CPC
  • ...

ntopia는 이렇게 다양한 답을 듣고는 UCPC가 무엇의 약자인지는 아무도 모른다고 결론내렸다. 적당히 슥삭해서 UCPC를 남길 수 있으면 모두 UCPC의 약자인 것이다!

문자열이 주어지면 이 문자열을 적절히 축약해서 "UCPC"로 만들 수 있는지 확인하는 프로그램을 만들어보자.

축약이라는 것은 문자열에서 임의의 문자들을 제거하는 행동을 뜻한다. 예를 들면, "apple"에서 a와 e를 지워 "ppl"로 만들 수 있고, "University Computer Programming Contest"에서 공백과 소문자를 모두 지워 "UCPC"로 만들 수 있다.

문자열을 비교할 때는 대소문자를 구분해 정확히 비교한다. 예를 들어 "UCPC"와 "UCpC"는 다른 문자열이다. 따라서 "University Computer programming Contest"를 "UCPC"로 축약할 수 있는 방법은 없다.

그나저나 UCPC는 정말 무엇의 약자였을까? 정확히 아시는 분은 제보 부탁드립니다.

입출력 예제

입력

첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는 경우도 없다.

출력

첫 번째 줄에 입력으로 주어진 문자열을 적절히 축약해 "UCPC"로 만들 수 있으면 "I love UCPC"를 출력하고, 만들 수 없으면 "I hate UCPC"를 출력한다.

예제 입력 1 복사
Union of Computer Programming Contest club contest
예제 출력 1 복사
I love UCPC
예제 입력 2 복사
University Computer Programming
예제 출력 2 복사
I hate UCPC

코드

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

int main(void)
{
	string str = "";
	string result = "";

	bool visit_U = false;
	bool visit_C = false;
	bool visit_P = false;
	bool visit_lastC = false;

	getline(cin, str); // 공백포함 입력
	for (auto temp : str)
	{
		if (temp == 'U')
		{
			if (!visit_U && !visit_C && !visit_P && !visit_lastC)
			{
				result += temp;
				visit_U = true;
			}
		}
		else if (temp == 'C')
		{
			if (visit_U && !visit_C && !visit_P && !visit_lastC)
			{
				result += temp;
				visit_C = true;
			}
			else if (visit_U && visit_C && visit_P && !visit_lastC)
			{
				result += temp;
				visit_lastC = true;
			}
		}
		else if (temp == 'P')
		{
			if (visit_U && visit_C && !visit_P && !visit_lastC)
			{
				result += temp;
				visit_P = true;
			}
		}
	}

	if (result == "UCPC") cout << "I love UCPC";
	else cout << "I hate UCPC";

	return 0;
}

풀이

  • 그리디 알고리즘을 사용하였다.
  • 처음에는 대문자만 간추려서 UCPC가 되면 통과인줄 알았는데 알고보니 UUUUCPPPPUUUUC
    처럼 그냥 문자열에 U , C , P , C 가 아무튼 순서대로 나온다면 통과되는 문제였다.
  • UCPC에 해당하는 bool변수 4개를 만들어서 앞의 단어가 먼저 나와야 뒤에 단어의 방문을 체크하도록 하였다.
    이로 인하여 순서대로 문자가 나오는 경우를 체크 할 수 있다.
저작자표시 (새창열림)

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

[C++] 11399번: ATM  (0) 2023.07.13
[C++] 11047번: 동전 0  (0) 2023.07.13
[C++] 3213번: 피자  (0) 2023.07.08
[C++] 1343번: 폴리오미노  (0) 2023.07.08
[C++] 4358번: 생태학  (0) 2023.07.06
'[게임 개발] 알고리즘 공부/백준' 카테고리의 다른 글
  • [C++] 11399번: ATM
  • [C++] 11047번: 동전 0
  • [C++] 3213번: 피자
  • [C++] 1343번: 폴리오미노
람팜팜~
람팜팜~
:)
  • 람팜팜~
    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
    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    [C++] 15904번: UCPC는 무엇의 약자일까?
    상단으로

    티스토리툴바