뭉지(moonz)
작은 발자국들의 위대한 여정
뭉지(moonz)
  • All (202)
    • Test Code (4)
    • 백엔드 개발하며 작성한 (27)
      • Spring (17)
      • 데이터베이스 (7)
      • 기억할 내용 (3)
    • 언어 (53)
      • Java (25)
      • node.js (7)
      • Python (21)
    • 클라우드 (6)
    • Algorithm & Data Structure (51)
      • 개념 (15)
      • 문제 풀이 (36)
    • 유용한 모든 것 (16)
    • monologue (7)
      • 업무 노트 (1)
      • 관리 로그 (0)
      • 내 이야기 공책 (6)
    • Project (2)
    • TroubleShooting (8)
    • 지식 (18)
      • Machine Learning (6)
      • Review (7)
      • Web (5)
    • Computer Science (5)

블로그 메뉴

  • 홈
  • 태그

인기 글

최근 글

최근 댓글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
뭉지(moonz)

작은 발자국들의 위대한 여정

[programmers] 모의고사  (Python)
Algorithm & Data Structure/문제 풀이

[programmers] 모의고사 (Python)

2021. 6. 21. 23:01
반응형

링크 : https://programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

 

문제 (level 1입니다)

분류

  • 완전 탐색

생각 정리

  • 반복되는 숫자들에 관심을 가지면 안되고, 반복되는 갯수에 관심을 가져야 한다.
  • 수포자1은 5개, 수포자2는 8개, 수포자 3은 10개를 반복하므로 문제의 정답과 비교할 때 나머지를 이용한다는 생각을 한다.
  • 문제의 정답과 같을 때 맞춘 점수를 ++해주고 두번 째 문제는 return 형식이다.
  • 맞춘 점수들 중에서 유일한 최대갯수가 있다면 한 개만 return하지만 동일한 갯수로 맞추었다면 오름차순형태로 모두 보여주는데 숫자로 return해야한다.
  • 여기서 오름차순으로 보여줘야한다는 것은 return할 때 [1,2,3..] 이런식이어야한다는 의미이다.
  • 세 개중 가장 최고점인 것과 비교하면서 같은 것이 있으면 answer에 추가한다.

전체 코드

def solution(answers):
    answer = []
    a_cnt, b_cnt, c_cnt = 0, 0, 0
    a = [1, 2, 3, 4, 5]               # 5개
    b = [2, 1, 2, 3, 2, 4, 2, 5]      # 8개
    c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]# 10개
    for i in range(len(answers)):
        if a[i%5] == answers[i]:      # 5개씩 반복(0,1,2,3,4,0,1,2,3,4..)
            a_cnt += 1
        if b[i%8] == answers[i]:
            b_cnt += 1
        if c[i%10] == answers[i]:
            c_cnt += 1
    rank = [a_cnt, b_cnt, c_cnt]
    temp = max(rank)                  # 같은 갯수의 문제를 맞췄으면 함께 출력
    for i in range(len(rank)):
        if rank[i] == temp:
            answer.append(i+1)
    return answer

 

다른 사람의 풀이

  • 하나의 리스트로 연산을 하고, enumerate를 이용하여 접근한 점이 Good
def solution(answers):
    answer = []
    cnt = [0,0,0]
    a = [1, 2, 3, 4, 5]               # 5개
    b = [2, 1, 2, 3, 2, 4, 2, 5]      # 8개
    c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]# 10개
    for i in range(len(answers)):
        if a[i%5] == answers[i]:      # 5개씩 반복(0,1,2,3,4,0,1,2,3,4..)
            cnt[0] += 1
        if b[i%8] == answers[i]:
            cnt[1] += 1
        if c[i%10] == answers[i]:
            cnt[2] += 1
    for idx, count in enumerate(cnt):
        if count == max(cnt):
        	answer.apend(idx+1)
    return result

 

반응형
저작자표시 (새창열림)

'Algorithm & Data Structure > 문제 풀이' 카테고리의 다른 글

[JAVA] baekjoon 1271  (0) 2021.09.08
[programmers] 완주하지 못한 선수 (Python)  (0) 2021.06.22
[4949] 균형잡힌 세상 (Python)  (0) 2021.06.21
[10828] 스택 (Python)  (0) 2021.06.21
[9012] 괄호 (Python)  (0) 2021.06.21
    'Algorithm & Data Structure/문제 풀이' 카테고리의 다른 글
    • [JAVA] baekjoon 1271
    • [programmers] 완주하지 못한 선수 (Python)
    • [4949] 균형잡힌 세상 (Python)
    • [10828] 스택 (Python)
    뭉지(moonz)
    뭉지(moonz)
    제가 깨달은 것을 정리하는 공간입니다. 🧡

    티스토리툴바