새소식

⌨️ Algorithms/백준

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

2023. 5. 16. 19:57

  • -

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

 

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

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

www.acmicpc.net

 

  • 문자열이 주어지면 이 문자열을 적절히 축약해서 "UCPC"로 만들 수 있는지 확인하기
  • 축약이라는 것은 문자열에서 임의의 문자들을 제거하는 행동을 뜻함
    • 예를 들면, "apple"에서 a와 e를 지워 "ppl"로 만들 수 있음
    • "University Computer Programming Contest"에서 공백과 소문자를 모두 지워 "UCPC"로 만들 수 있음
  • 문자열을 비교할 때는 대소문자를 구분해 정확히 비교
    • 예를 들어 "UCPC"와 "UCpC"는 다른 문자열
    • 따라서 "University Computer programming Contest"를 "UCPC"로 축약할 수 있는 방법은 없음
  • 입력
    • 첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어짐
    • 문자열의 길이는 최대 1,000자
    • 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는 경우도 없음
  • 출력
    • 첫 번째 줄에 입력으로 주어진 문자열을 적절히 축약해 "UCPC"로 만들 수 있으면 "I love UCPC"를 출력하고, 만들 수 없으면 "I hate UCPC"를 출력
  • 시간 제한: 1초
  • 메모리 제한: 512 MB

 

"""
입출력 예시)

(예제 입력 1) 
Union of Computer Programming Contest club contest
    -> I love UCPC

(예제 입력 2) 
University Computer Programming
    -> I hate UCPC
"""

 

 

## 의사코드 ##

# 주어진 문자열에서 대문자만 추출
# import re
# re.findall('[A-Z]', string)

# 대문자만 추출한 문자열이 'UCPC'와 동일한지 확인

 

 

 

 

import re
string = input()
# 주어진 문자열에서 대문자만 추출한 줄임말
short = ''.join(re.findall('[A-Z]', string))
# 대문자만 추출한 문자열이 'UCPC'와 동일한지 확인
if short == 'UCPC':
    print('I love UCPC')
else:
    print('I hate UCPC')

 

 

-> 틀림

 

 

 

 

string = input()
short = '' # 줄임말
for s in string:
    # 현재 문자가 'UCPC'에 해당하면 줄임말에 추가
    if s in 'UCPC':
        short += s
# 줄임말이 'UCPC'와 동일한지 확인
if short == 'UCPC':
    print('I love UCPC')
else:
    print('I hate UCPC')

 

 

-> 틀림

 

 

  • 대문자만 남겼을 때 'UCPC'가 되는지 보는 게 아니고 줄임말이 'UCPC'와 정확히 일치하는지를 보는 것도 아니여서 틀림
  • 문자열에서 임의의 문자들을 제거해도 'UCPC'가 되는지를 확인해야 함
    • 아래의 예시들도 모두 'I love UCPC'가 정답
      • 'UUCPC'
      • 'UCASDFPC'
      • 'ASDFUCPC'
      • 'UCPCASDF'
      • 'AUBCCPDC'

 

 

 

 

import re
string = input()
# 주어진 문자열에서 대문자만 추출한 줄임말
short = ''.join(re.findall('[A-Z]', string))
ucpc = 'UCPC'
idx = 0 # 인덱스
for s in short:
    # 현재 문자가 'UCPC'의 idx번째 문자와 같다면 인덱스+1
    if s == ucpc[idx]:
        idx += 1
    # 인덱스가 4이면 'UCPC'를 모두 찾은 것이므로 'I love UCPC' 출력
    if idx == 4:
        print('I love UCPC')
        break
else:
    print('I hate UCPC')

 

 

-> 인덱스를 활용해서 현재 문자가 'UCPC'의 인덱스 번째 문자와 같으면 인덱스에 1을 더하는 형식으로 확인

 

 

  • 과정 확인
string = 'ASDFUCPC'

"""
대문자만 추출한 줄임말: ASDFUCPC 

현재 문자: A, 현재 인덱스: 0 

현재 문자: S, 현재 인덱스: 0 

현재 문자: D, 현재 인덱스: 0 

현재 문자: F, 현재 인덱스: 0 

현재 문자: U, 현재 인덱스: 0 

현재 문자가 "UCPC"의 idx번째 문자와 같으므로 인덱스+1
-------------------------------------------------------------------------------- 

현재 문자: C, 현재 인덱스: 1 

현재 문자가 "UCPC"의 idx번째 문자와 같으므로 인덱스+1
-------------------------------------------------------------------------------- 

현재 문자: P, 현재 인덱스: 2 

현재 문자가 "UCPC"의 idx번째 문자와 같으므로 인덱스+1
-------------------------------------------------------------------------------- 

현재 문자: C, 현재 인덱스: 3 

현재 문자가 "UCPC"의 idx번째 문자와 같으므로 인덱스+1
-------------------------------------------------------------------------------- 

I love UCPC
"""

 

 

 

 

 

 

https://www.acmicpc.net/board/view/106419

 

글 읽기 - 테스트케이스는 통과하는데 '틀렸습니다' 가 뜨는 이유

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

https://my-coding-notes.tistory.com/507

 

[🥈5 / 백준 15904 / 파이썬] UCPC는 무엇의 약자일까?

15904번: UCPC는 무엇의 약자일까? 첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백

my-coding-notes.tistory.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!