이직하고만다(분노)
99클럽 코테 스터디 15일차 TIL + 프로그래머스 완전탐색
xxo_ohii
2024. 8. 5. 16:22
728x90
- 오늘의 학습 키워드 : 완전탐색
- 문제링크 : 프로그래머스 모의고사 수포자 https://school.programmers.co.kr/learn/courses/30/lessons/42840
- 공부한 내용 본인의 언어로 정리하기 : (밑에 정리)
- 오늘의 회고
# 완전탐색 알고리즘은 가능한 모든 경우의 수를 탐색하여 해를 찾는 방법입니다.
- 특징 :
- 장점: 모든 가능한 경우의 수를 고려하므로 항상 최적해를 보장합니다.
- 단점: 경우의 수가 많아지면 시간 복잡도가 급격히 증가하여 비효율적일 수 있습니다.
< 내가 푼 문제 >
def solution(answers):
answer = []
#완전탐색 문제
#가장 많은 문제를 맞춘 사람은 누구인지 배열에 담아 리턴해라
# 1번 2번 3번 수포자가 찍는 방식은 각자 다름 아래는 찍는 방식을 배열에 넣은 것
people_1 = [1,2,3,4,5]
people_2 = [2,1,2,3,2,4,2,5]
people_3 = [3,3,1,1,2,2,4,4,5,5]
#수포자들의 점수
count = [0,0,0] #count해서 초기화
for i in range(len(answers)): #answer의 범위만큼 요소 i를 비교하며 for문 실행
if answers[i] == people_1[i%5]: #정답이랑 people1의 찍은 방식이랑 비교
count[0] += 1 #점수 카운트에 +1
if answers[i] == people_2[i%8]:
count[1] += 1
if answers[i] == people_3[i%10]: # answers[i] == people_3[i]:
count[2] += 1
for i in range(3): # count 리스트에서 가장 높은 점수를 가진 수포자를 찾습니다
if count[i] == max(count): #최고 점수와 일치하는 수포자를 answer 리스트에 추가합니다
answer.append(i+1)
return answer
<남이 푼 문제>
def solution(answers):
pattern1 = [1,2,3,4,5]
pattern2 = [2,1,2,3,2,4,2,5]
pattern3 = [3,3,1,1,2,2,4,4,5,5]
score = [0, 0, 0]
result = []
for idx, answer in enumerate(answers):
if answer == pattern1[idx%len(pattern1)]:
score[0] += 1
if answer == pattern2[idx%len(pattern2)]:
score[1] += 1
if answer == pattern3[idx%len(pattern3)]:
score[2] += 1
for idx, s in enumerate(score):
if s == max(score):
result.append(idx+1)
return result
다른 사람들이 푼 문제는
- enumerate를 사용하여 answers 리스트의 각 문제와 해당 인덱스를 얻는다
- 각 문제에 대해 수포자들의 찍기 패턴과 비교하여 맞추면 score 리스트의 해당 인덱스를 증가시킨다
- 패턴의 길이는 len(pattern1), len(pattern2), len(pattern3)로 구해 각각 패턴의 길이를 초과하지 않도록 인덱스를 조정한다.
==> 다른 사람들이 푼 문제가 가독성 있고 유지보수에도 편리하다ㅠㅠ
728x90