[BOJ] 1159. 농구 경기

Jimeaning·2023년 4월 8일
0

코딩테스트

목록 보기
65/143

Python3

문제

입출력

입출력 예시

주요 포인트

반복문을 n까지 반복해서 n명의 이름을 입력 받는다.
이름의 첫 번째 글자를 first 리스트에 넣는다.

set 함수를 사용해 first의 중복값을 제거한다.

중복값이 없는 fs 리스트 내에서 반복문을 실행한다.
문제의 첫 번째 입출력 예시로 설명하면,
fs는 {'k', 'h', 's', 'p', 'b'} 이다.

만약 first 리스트 안에 'k', 'h', 's', 'p', 'b' 값이 각각 5개 이상 있다면 ans 배열에 그 알파벳을 넣는다.

ans 배열의 길이가 0보다 크다면, 즉 5명 이상 같은 알파벳으로 시작하면,
ans 배열을 sort한 후 join 함수로 출력한다.

ans 배열의 크기가 0이면 PREDAJA를 출력한다.

나의 풀이 (시도)

n = int(input())
first = []
alp = [0] * 26
ans = ''

for i in range(n):
    name = input()
    first.append(name[0])

    alp[ord(first[i]) - 97] += 1


if max(alp) < 5:
    print('PREDAJA')
else:
    for i in alp:
        if i >= 5:
            ans += chr(alp.index(i)+97)
    print(ans)

문자형 그대로 count 함수를 사용해서 개수를 셀 수 있는데, 문자를 몇 번 나왔는지 숫자로 더하고 그 인덱스 값을 다시 문자로 변환하려고 해서 복잡해졌다.

최종 코드

n = int(input())
first = []
ans = []

for i in range(n):
    name = input()
    first.append(name[0])

fs = set(first)

for i in fs:
    if first.count(i) >= 5:
        ans.append(i)

if len(ans) > 0:
    print(''.join(sorted(ans)))
else: print('PREDAJA')

피드백

  • count 함수
    '변수.count(찾는 요소)'
    ex) 'ooxxyyy'.count('y') => 3

  • sorted
    리스트.sort() : 원 배열에 변형이 일어남
    sorted(리스트) : 원 배열은 내버려두고 정렬한 새로운 리스트를 반환함

  • join 함수
    ''.join(리스트)를 통해 리스트를 문자열로 합쳐서 반환함
    ex) ['a', 'b', 'c'] -> 'abc'

참고

https://chaewsscode.tistory.com/8

profile
I mean

0개의 댓글