[210126 TIL] Programmers Algorithm(완전탐색, 정렬)

602go·2021년 1월 26일
0

Algorithm

목록 보기
4/6
post-thumbnail

Today I Learned

written by 602



Programmers) 완전탐색 01. 모의고사

def solution(answers):
    c = len(answers)
    #수포자들 정답 리스트
    ans_1 = [1, 2, 3, 4, 5] #5
    ans_2 = [2, 1, 2, 3, 2, 4, 2, 5] #8
    ans_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] #10
    
    points = [0]*3 # 세 사람의 포인트 리스트 초기화
    #한 문제씩 정답 비교하면서 포인트 +1
    for i in range(c):
        if answers[i] == ans_1[i%5]:
            points[0] += 1
        if answers[i] == ans_2[i%8]:
            points[1] += 1
        if answers[i] == ans_3[i%10]:
            points[2] += 1
            
    answer = [] #정답리스트
    for idx, p in enumerate(points):
        if p == max(points):
            answer.append(idx+1)

    return answer

Programmers) 정렬 02. 가장 큰 수

def solution(numbers):
    nums = list(map(str, numbers))
    # nums = sorted(nums, key=lambda x: x[0], reverse=True) # 나의 풀이
    nums = sorted(nums, key=lambda x: x*3, reverse=True) # 정답 풀이
    return str(int(''.join(nums)))
  1. 3과 325가 있다고 했을 때,

    3, 325 순으로 정렬이 되어야 하는데 나의 풀이, 정답풀이 모두 3,325 순으로 옳게 정렬이 된다.

  2. 3과 345가 있다고 했을 때,

    345, 3으로 정렬이 되어야 하는데 나의 풀이는 3,345, 정답풀이는 345,3으로 정렬이 된다.

즉, 단순히 첫 숫자인 3이 같을 때, 나의 풀이는 뒷자리에 어떤 수가 오든 간에 자릿수가 더 작은 3을 앞으로 정렬한다. 하지만 위와 같은 문제는 첫자리가 같을 때 그 뒷자리 수들을 비교하는 것이 핵심이기 때문에 숫자를 3번씩 이어붙여서 자릿수끼리 이어서 비교할 수 있도록 해주어야 한다.



0개의 댓글