반응형
백준 BAEKJOON 31832번 팀명 정하기 2 [PYTHON/파이썬]
<문제 출처> (BRONZE Ⅱ)
https://www.acmicpc.net/problem/31832
<풀이>
처음엔 for 문 안에서 세 가지 조건을 다 대입하려다가
조건이 꼬여서 히든 케이스를 잡지 못했다.
결국에는 조건 하나하나마다 함수를 만들어서 풀게 되었다.
함수를 통해 세 가지 조건 모두 참인 팀명이 정답이 되는 것이다.
※ 알파벳 대문자, 알파벳 소문자, 숫자, 하이픈의 아스키코드는 각각 65-90, 97-122, 48-57, 45이다.
첫 번째 조건, 대문자가 소문자보다 많으면 안 된다.
결국 소문자는 대문자보다 크거나 같아야 한다.
나는 for 문과 ord 함수를 사용하여 대문자와 소문자 개수를 파악하였다.
두 번째 조건, 팀명은 10글자 이하여야 한다.
이 조건은 단순하게 len 함수를 통해 문자열의 길이를 구하면 된다.
세 번째 조건, 숫자가 아닌 글자가 하나 이상 포함되어야 한다.
만약 히든 케이스로 하이픈(-)만 들어간 팀명이 있다고 생각해 보자 (예: '-----')
이 팀명도 조건에 부합하여서 정답이 된다.
나는 단순히 for문을 통해서 문자가 있는지 없는지 파악하기 위해
숫자에 해당하는 아스키코드(48~57) 범위 이외의 것들이 있는지 확인했다.
있으면 True, 없으면 False를 return 하였다.
<코드>
# 알파벳 대문자, 알파벳 소문자, 숫자, 하이픈의 아스키코드는 각각 65-90, 97-122, 48-57, 45이다.
# 첫 번째 조건
def conditionOne(teamName):
upperCase, lowerCase = 0, 0
for i in teamName:
if 65 <= ord(i) <= 90:
upperCase += 1
elif 97 <= ord(i) <= 122:
lowerCase += 1
return lowerCase >= upperCase
# 두 번째 조건
def conditionTwo(teamName):
return len(teamName) <= 10
# 세 번째 조건
def conditionThree(teamName):
letterCheck = False
for i in teamName:
if ord(i) < 48 or ord(i) > 57:
letterCheck = True
return letterCheck
N = int(input())
result = ""
for _ in range(N):
S = input()
if conditionOne(S) and conditionTwo(S) and conditionThree(S): # 세 조건 모두 참이면
result = S
print(result)
반응형
'ALGORITHM > PYTHON' 카테고리의 다른 글
백준 BAEKJOON 31922번 이 대회는 이제 제 겁니다 [PYTHON/파이썬] (0) | 2024.06.11 |
---|---|
백준 BAEKJOON 31867번 홀짝홀짝 [PYTHON/파이썬] (0) | 2024.06.03 |
백준 BAEKJOON 31831번 과민성 대장 증후군 [PYTHON/파이썬] (0) | 2024.06.01 |
백준 BAEKJOON 31823번 악질 검거 [PYTHON/파이썬] (0) | 2024.05.26 |
백준 BAEKJOON 31833번 온데간데없을뿐더러 [PYTHON/파이썬] (0) | 2024.05.24 |