알고리즘/백준

[Python] 백준 15904번 - UCPC는 무엇의 약자일까?

번잔중 2022. 4. 27. 23:45
 

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"를 출력한다.

 

s = input()
ucpc = ['U', 'C', 'P', 'C']
chk = True

for i in ucpc:
    if i in s:
        s = s[s.index(i) + 1:]
    else:
        chk = False
        break

if chk:
    print('I love UCPC')
else:
    print('I hate UCPC')

이 문제 또한 조건을 잘 읽어보시고 풀어보셔야 합니다,,,, 저는 반례때문에 틀린 코드를 작성하고 다시 풀었습니다. ^^...

 

- 입력을 받고 UCPC가 저장된 리스트로 검사를 해줍니다.

- chk라는 bool형 변수를 사용해서 UCPC를 만들 수 있는지 없는지 판단합니다.

- 만약 UCPC를 순서대로 찾아볼 때, 입력된 문자열에 있다면 chk는 처음에 True로 뒀기 때문에 s에 존재하는 U, C, P, C 다음 인덱스부터 슬라이스로 잘라냅니다. 하지만 입력된 문자열에 없다면 chk를 False로 만들고 for문을 바로 빠져나와 I hate UCPC를 출력합니다.

- if문에서 문제가 없으면 chk는 True일 것이므로 I love UCPC가 출력됩니다.

 

처음 문제 풀때는 그냥 문자열에 UCPC가 있으면 다른 문자열 변수에 붙여서 UCPC면 I love UCPC, 아니면 I hate UCPC로 출력했었는데요. 틀리고나서 다시 생각해보니 입력으로 Computer Union Cola People Coming soon(이상한 문장..) 같은 문장이 입력되면 UCPC를 만들 수 있는데도 CUCPC가 되어 I hate UCPC가 나오더라구요. 그래서 다시 풀었습니다 ^^,,,, 여러분은 그러지 않으셨길 바랍니다 ㅎㅎ;

 

피드백은 언제나 환영합니다.