이번에 포스팅할 문제는 모의고사 문제!
위의 조건이 주어졌을 때 조건에
정답이 가장 많이 일치하는 사람을 선택해주면 됩니다
위에서 1번 수포자의 반복되는 방식이
1 -> 2 -> 3 -> 4 -> 5 -> 1 ->..............
하나씩 증가하는 방식입니다.
2번 수포자의 반복되는 방식은
2 -> 1 -> 2 -> 3 - > 2 -> 4 -> 2 - > 5 -> 2 -> ..............
2를 빼고 보면 1 -> 3 -> 4 -> 5
일반 순서에서 2를 빼고 앞뒤로 하나씩 넣어준 방식
3번 수포자의 방식은
3 -> 3- > 1 -> 1 -> 2 -> 2 -> 4 -> 4 -> 5 -> 5 -> ...
2개씩 나열하며 3번은 맨 앞에 나열한 방식!
근데 사실 방식을 아무리 알더라도 이렇게 문제를 푼다면?? 생각보다 많은 시간이 소요되겠죠?...
from itertools import cycle
def solution(answer):
math1 = [1, 2, 3, 4, 5]
math2 = [2, 1, 2, 3, 2, 4, 2, 5]
math3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
check = [0] * 3
result = []
# import math
# math1 = math1 * math.ceil(len(answers) / len(math1))
# math2 = math2 * math.ceil(len(answers) / len(math2))
# math3 = math3 * math.ceil(len(answers) / len(math3))
# for i in range(len(answers)):
# if answers[i] == math1[i]:
# check[0] += 1
# maxSize = False
# if answers[i] == math2[i]:
# check[1] += 1
# maxSize = False
# if answers[i] == math3[i]:
# check[2] += 1
# maxSize = False
# if check[0] == check[1] and check[1] == check[2]:
# maxSize = True
# maxSum = 0
# for i in range(len(check)):
# try:
# if maxSize == True:
# result = [1, 2, 3]
# break
# if check[i] < check[i+1]:
# maxSum = i
# except IndexError:
# continue
# if len(result) == 0:
# result.append(maxSum + 1)
for number1, number2, number3, answer in zip(cycle(math1),cycle(math2),cycle(math3), answer):
if number1 == answer:
check[0] += 1
if number2 == answer:
check[1] += 1
if number3 == answer:
check[2] += 1
maxSize = max(check)
for i in range(len(check)):
if check[i] == maxSize:
print(check[i])
result.append(i+1)
return result
원래는 주석 친 방식처럼 구하려고 했습니다.
내가 입력한 값을 찍는 방식에 따라서 Check를 한 후
만약에 check 카운트의 수가 동일하거나 True라면 모든 사람을 출력하고
그렇지 않다면 가장 큰 사람을 출력하는 방식을 하려고 했으나....
이러한 방법은 리스트의 크기가 커지는 경우에 생각보다 비 효율적이여서
파이썬에서 사용할 수 있는 내장함수인 zip과 cycle을 이용하게 되었습니다.
cycle은 말 그대로 무한 반복을 할 수 있습니다.
즉 위에 보면 math1을 1, 2, 3, 4, ,5 총 5개의 크기만 존재하지만
5개보다 더 많은양이 들어온다면 해당 리스트를 크기만큼 반복하게 됩니다.
zip은 동일한 개수로 이루어진 자료형을 묶어주는 역할을 합니다.
따라서 위에서 리스트의 크기가 해당 math와 일치하지 않더라도 크기에 알맞게 반복문을 돌려서
해당 결과를 도출할 수 있습니다.
다음에는 더 좋은 포스팅으로 찾아오겠습니다!
최근에 알고리즘 공부를 소홀히 하는데.....
좀 더 열심히 해서 포스팅을 자주하겠습니다 ㅠㅠ
'Algorithm > 프로그래머스' 카테고리의 다른 글
세무민의 코딩일기 : 프로그래머스 크레인 인형뽑기 게임 문제 풀기 (2) | 2021.02.18 |
---|---|
세무민의 코딩일기 : 프로그래머스(SQL) 최대값 구하기 문제 풀기 (0) | 2021.02.17 |
세무민의 코딩일기 : 프로그래머스 가장 큰 수 문제 풀기! (0) | 2021.02.07 |
세무민의 코딩일기 : 프로그래머스 K번째수 문제 풀기! (0) | 2021.02.06 |
세무민의 코딩일기 : 프로그래머스 기능개발 문제 풀기! [deque() 사용하기] (0) | 2021.02.05 |