swexpertacademy.com/main/solvingProblem/solvingProblem.do
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
0에서 9까지 숫자가 적힌 N장의 카드가 주어진다.
가장 많은 카드에 적힌 숫자와 카드가 몇 장인지 출력하는 프로그램을 만드시오. 카드 장수가 같을 때는 적힌 숫자가 큰 쪽을 출력한다.
[입력]
첫 줄에 테스트 케이스 개수 T가 주어진다. ( 1 ≤ T ≤ 50 )
다음 줄부터 테스트케이스의 첫 줄에 카드 장수 N이 주어진다. ( 5 ≤ N ≤ 100 )
다음 줄에 N개의 숫자 ai가 여백없이 주어진다. (0으로 시작할 수도 있다.) ( 0 ≤ ai ≤ 9 )
[출력]
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 가장 많은 카드의 숫자와 장 수를 차례로 출력한다.
입력 | 출력 |
3 5 49679 5 08271 10 7797946543 |
#1 9 2 #2 8 1 #3 7 3 |
✨ 나의 풀이
T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
num=int(input()) # 카드 장수
card=""
card+=input() # 카드
memo=list() # 중복 없이 숫자를 담는 리스트
ans=list()
for i in card:
if i not in memo: # memo에 없는 숫자는 추가
memo.append(i)
cnt=card.count(i)
ans.append((cnt, int(i))) # 특정 숫자 카드 갯수, 특정 숫자를 튜플 형태로 리스트에 추가
i, j=max(ans) # 카드 갯수가 가장 큰 숫자 카드
print('#%d %d %d' %(test_case, j, i))
card를 문자열로 선언하고 숫자 카드를 입력받는다.
문자열 card를 반복하면서 숫자의 갯수를 센다. 리스트 memo에 있는 숫자인지 확인하는 과정을 통해 중복 제거.
리스트 ans에 (특정 숫자 카드 갯수, 특정 숫자)를 추가한다. max가 앞에 있는 값으로 비교해서 cnt를 앞에 넣었다.
반복문이 끝난 후 카드 갯수가 가장 많은 카드의 숫자와 장수를 출력한다.
TC = int(input()) # 테스트 케이스 수
for tc in range(1, TC+1):
N = int(input()) # 카드 장수
Data = input()
Data = [int(_) for _ in Data] # 숫자 카드
cnt_lst = [0]*10 # 0부터 9까지
for i in range(N):
cnt_lst[Data[i]] += 1 # 0부터 9까지 카드 장수 세기
max_index, max_num = 0, 0
for i in range(len(cnt_lst)-1,-1,-1): # 9부터 거꾸로 찾기
if cnt_lst[i] > max_index:
max_index = cnt_lst[i]
max_num = i
print('#%s %d %d'%(tc, max_num, max_index))
cnt_lst에 0부터 9까지 리스트로 할당하고 각 숫자 카드 장수를 반복문으로 세는 부분이 잘 한 것 같다.
같은 장수면 숫자가 더 높은 카드를 출력해야하기 때문에 cnt_lst를 뒤에서부터 본다.
'coding test' 카테고리의 다른 글
[파이썬] 4836. 색칠하기 (0) | 2021.01.06 |
---|---|
[파이썬] 4835. 구간합 (0) | 2021.01.06 |
[파이썬] 4831. 전기버스 (0) | 2021.01.04 |
[파이썬] 풍선 터트리기 (0) | 2021.01.04 |
[파이썬] 조이스틱 (0) | 2020.12.31 |