4834. 숫자카드

딩구루르·2024년 3월 30일

One Day One Coding

목록 보기
4/13
post-thumbnail
  1. 문제 해석

    0~9까지의 숫자가 적힌 N장의 카드에서 가장 많이 나온 숫자와 개수를 출력

  2. 입력

    • N
    • 카드 리스트 cards
  3. 출력

    • 가장 많이 나온 숫자, 카드 개수
  4. 문제 풀이 절차

    • 아이디어
      1. 0~9까지의 배열에 cnt 저장해서 값과 인덱스 출력
      2. 카드 개수가 똑같은 경우 카드의 숫자가 큰 것을 출력해야 하므로 max나 min은 쓰기 어렵고 임의의 값 갱신 필요
    • 필요 변수
      • cnt 리스트 [0]*10
      • cnt에서 가장 큰 숫자를 저장할 maxI, 가장 많은 카드 수를 저장할 maxE
  5. 작성 코드

    import sys
    sys.stdin = open('./4834_input.txt')
    
    for tc in range(1, int(input())+1):
        N = int(input())
        cards = list(map(int,input()))
        
        cnt = [0]*10
        for elem in cards: #카드 개수 저장
            cnt[elem] += 1
        
        maxE, maxI = 0,0
        for i, e in enumerate(cnt): #카드 최대개수, 카드숫자 추출 위한 for문
            if maxE<=e:
                maxE = e
                maxI = i
                if maxI<i:
                    maxI=i
        print(f'#{tc}', maxI, maxE)
    1. 피드백
      "유진님 아이디어는 너무 잘 해주셨습니다. 다만 if문 처리 방식에 대해 조금 더 명확한 학습이 필요합니다. 아래는 그 이유와 예시 코드입니다. 혹 더 보충 설명이 필요하다면 말씀해주세요."

    2. 피드백 코드

      import sys
      sys.stdin = open('./4834_input.txt')
      
      for tc in range(1, int(input())+1):
          N = int(input())
          cards = list(map(int,input()))
      
          cnt = [0]*10
          for elem in cards: #카드 개수 저장
              cnt[elem] += 1
      
          maxE, maxI = 0,0
          for i, e in enumerate(cnt): #카드 최대개수, 카드숫자 추출 위한 for문
          #  if maxE<=e:
          #      maxE = e
          #      maxI = i
              #  if maxI<i: #이곳 if문은 제대로 실행 될 수 없습니다. 
              #      maxI=i #위에서 maxI값을 무조건 i의 값으로 바꾸고 있기 때문에 maxI==i가 됩니다.
              if maxE <= e:
                  if maxE==e :
                      maxI = max(maxI, i)
                  else :
                      maxE = e
                      maxI = i
      
      print(f'#{tc}', maxI, maxE)
       

0개의 댓글