728x90
문제링크
https://www.acmicpc.net/problem/15904
문제
UCPC는 '전국 대학생 프로그래밍 대회 동아리 연합 여름 대회'의 줄임말로 알려져있다. 하지만 이 줄임말이 정확히 어떻게 구성되었는지는 아무도 모른다. UCPC 2018을 준비하던 ntopia는 여러 사람들에게 UCPC가 정확히 무엇의 줄임말인지 물어보았지만, 아무도 정확한 답을 제시해주지 못했다. ntopia가 들은 몇 가지 답을 아래에 적어보았다.
ntopia는 이렇게 다양한 답을 듣고는 UCPC가 무엇의 약자인지는 아무도 모른다고 결론내렸다. 적당히 슥삭해서 UCPC를 남길 수 있으면 모두 UCPC의 약자인 것이다!
문자열이 주어지면 이 문자열을 적절히 축약해서 "UCPC"로 만들 수 있는지 확인하는 프로그램을 만들어보자.
축약이라는 것은 문자열에서 임의의 문자들을 제거하는 행동을 뜻한다. 예를 들면, "apple"에서 a와 e를 지워 "ppl"로 만들 수 있고, "University Computer Programming Contest"에서 공백과 소문자를 모두 지워 "UCPC"로 만들 수 있다.
문자열을 비교할 때는 대소문자를 구분해 정확히 비교한다. 예를 들어 "UCPC"와 "UCpC"는 다른 문자열이다. 따라서 "University Computer programming Contest"를 "UCPC"로 축약할 수 있는 방법은 없다.
그나저나 UCPC는 정말 무엇의 약자였을까? 정확히 아시는 분은 제보 부탁드립니다.
조건
시간제한 : 1초
메모리 제한 : 512 MB
입력
첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는 경우도 없다.
출력
첫 번째 줄에 입력으로 주어진 문자열을 적절히 축약해 "UCPC"로 만들 수 있으면 "
I love UCPC
"를 출력하고, 만들 수 없으면 "
I hate UCPC
"를 출력한다.
문제정리
이번 문제의 경우 처음에 대문자만 다 찾아내어 "UCPC"를 contains 하여 찾아 내려고 했으나 "UCPC"가 붙어 있지 않을 거라는 반례를 찾아 코드를 급하게 수정하였습니다.
모든 문자에 대해서 비교를 하며 내가 원하는 문자열이 있을 때마다 count을 하여 처음부터 "UCPC" 순서대로 찾도록 코드를 짰습니다.
더 자세한 내용은 아래 코드에 설명이 되어있습니다.
C# 코드
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
|
static void Main(string[] args)
{
// 15904 UCPC는 무엇의 약자일까?
StreamWriter writer = new StreamWriter(OpenStandardOutput());
StreamReader reader = new StreamReader(OpenStandardInput());
char[] input = reader.ReadLine().ToCharArray();
int count = 0;
string str = "UCPC";
for (int i = 0; i < input.Length; i++)
{
if (input[i] == str[count]) // count를 하나씩 올려주며 UCPC가 있는지 확인
{
count++;
if (count == 4) // UCPC가 다 있으면 종료
break;
}
}
if (count == 4)
writer.WriteLine("I love UCPC");
else
writer.WriteLine("I hate UCPC");
writer.Close();
reader.Close();
}
|
cs |
읽어주셔서 감사합니다 오늘도 즐거운 하루 되세요.
728x90