걸림돌
- 필요한 세트의 수를 찾는데 6과 9를 뒤집어서 사용할 수 있기 때문에 이를 고려하는 알고리즘을 짜는 것에 고민을 많이 함
- → 인터넷을 찾아보니 card[0] * 10을 사용하여 각 숫자의 등장 횟수를 저장하는 인덱스를 미리 만들어두고 각 인덱스 번호 별로 각 숫자의 등장 횟수를 저장하여 사용함, 또 6과 9는 뒤집어서 함께 사용할 수 있기 때문에 6과 9의 등장 횟수가 같을 땐 card[6]에, 다를 땐 card[9]에 +1을 해줌
코드
N = list(map(int,input()))
S = []
if len(N) != len(set(N)):
if N.count(6) >= 2 or N.count(9) >= 2:
result_69 = ((N.count(6) + N.count(9))/2) + ((N.count(6) + N.count(9))%2)
for i in range (10):
S.append(N.count(i))
if max(S) > result_69:
print(max(S))
else:
print(result_69)
else:
print('1')
위 코드는 처음에 내가 짠 코드임
코드의 문제점
- 6과 9가 나오는 수를 고려하여 그에 맞게 세트 수를 result_69에 저장하는 것에는 성공했으나 만약 N에 9999 처럼 6이나 9의 수가 result_69 = ((N.count(6) + N.count(9))/2) + ((N.count(6) + N.count(9))%2)에서 result_69에 저장된 수 보다 많게 등장한다면 등장 횟수가 S에 저장되어서 max(S)를 했을 경우 오류가 발생하게 됨
n = int(input())
# 각 수가 나온 횟수를 저장하기 위한 인덱스를 만듬
card = [0] * 10
# n에 들어간 숫자를 i에 대입하면서 반복하는 for문
for i in str(n):
# i가 6 또는 9 일때 횟수 저장 인덱스에 1씩 더해줌
if i == "9" or i == "6":
# 6과 9는 뒤집어서 사용할 수 있기 때문에 각 수가 나온 수가 같을 땐
# card[6]에 +1을, 다를 땐 card[9]에 +1을 해준다
if card[6] == card[9]:
card[6] += 1
else:
card[9] += 1
# 6과 9를 제외한 나머지 숫자는 그 숫자에 맞는 인덱스에 +1 해준다
else:
card[int(i)] += 1
# card 리스트의 max 값이 필요한 세트의 최소값이 됨
print(max(card))
위 코드는 제출한 코드
알게된 점
- 위의 경우처럼 리스트에 저장된 각 숫자들의 등장 횟수를 고려하기 위해서는 list [0] * 10과 같이 횟수를 저장할 인덱스를 미리 만들어두고 숫자에 맞는 인덱스에 등장 횟수를 저장하면 편함
- 리스트에서 중복된 수가 있는지 없는지 검출하기 위해서 if len(list) != len(set(list))와 같은 방법도 쓸 수 있다는 걸 깨달음
'BeakJoon > Python' 카테고리의 다른 글
[Python] 백준 #2751번 : 수 정렬하기 2 (1) | 2023.11.11 |
---|---|
[Python] 백준 #2941번 : 크로아티아 알파벳 [S-V] (1) | 2023.11.09 |
[Python] 백준 #2303번 : 숫자 게임 (S-V) (1) | 2023.11.09 |
[Python] 백준 #1181번 : 단어 정렬(S-V) (0) | 2023.11.08 |
[Python] 백준 #1316번 : 그룹 단어 체커 (S-V) (0) | 2023.11.08 |