코딩,해볼까

[programmers] 입문 : 최빈값 구하기 / 최빈값.... 최qkfsha... 본문

Back/TIL

[programmers] 입문 : 최빈값 구하기 / 최빈값.... 최qkfsha...

떠굥 2023. 4. 5. 04:42

코딩테스트 입문 : 최빈값 구하기 바로가기 >>

 

 

1. 문제풀이 시작점에서의 나의 계획 : 비교/삭제 해나가면서 결과를 출력한다.

array(list)의 0번째와 1번째 비교 후 삭제, 0번째와 2번째 비교, 0번째와 3번째 비교...

   > 기본값이 있는 상태에서 기본값보다 큰 값이 오면 기본값은 삭제하고 큰 값이 기본값이 된다.

 

# array 안의 숫자들을 카운트 해야함
# array 함수에서 카운트했을 때 큰 수를 find_max_num 변수에 저장하여 프린트 해볼까?
# find_max_num = array.count(i)
# print(find_max_num)

array = [1, 2, 3, 3, 3, 4]

for i in array:
    count_list = []
    count_list.append(array[0])
    if count_list[0] < array.count(i):
        count_list.pop(0)
        count_list.append(i)
    elif count_list[0] == array.count(i):
        print(count_list)

 

2. 여기서부터 세히씨와 같이 풀어봤다.

 

1) append 해줄 때 원래 값, 갯수 둘 다 들어가면 어떨까?

  - 리스트에 딕셔너리, 딕셔너리에 딕셔너리... 해보다가 append가 오류를 뱉어내서 결국 2차원 배열 형태로 넣기로 했다.

  - count_list.append([array.count(i), i])

 

2) for문 안에 빈 배열 count_list = [] 을 넣었더니

 

[[1,1]]

[[1,1],[2,1]]...

[[1,1],[2,1],[3,3],[3,3],[3,3],[4,1]]

 

  - 배열이 반복되어 끝에서야 나왔다.

  - 3,3이 반복되어 출력되었다.

 

해결 : array_set = list(set(array)) 로 중복이 제거된 새로운 배열을 만들어 for문의 배열을 바꿔주었다.

 

3) count_list를 오름차순 정렬하여 값을 비교하기 쉽도록 하였다. 아래는 바뀐 배열이다.

  - sort, sorted함수가 계속 헷갈린다..  count_list.sort(reverse=True)

 

[[1, 1], [2, 1], [3, 3], [4, 1]]

count_list.sort(reverse=True)
print(count_list)

[[3, 3], [1, 4], [1, 2], [1, 1]]

 

4) 맨 앞의 2개만 검증해줘도 충분하다 생각되어 함수를 이렇게 작성하였다.

 

if count_list[0][0] == count_list[1][1]:
    answer = -1
else:
    answer = count_list[0][1]
print(answer)

 

 

5) array에 1개의 값이 올 때 오류가 생겼다. 그래서 전체 식에 아래 조건을 추가해주었다.

 

if len(array) == 1:
        answer = array[0]
    else:

 

return 들여쓰기 한 끗 차이로 성공하여 매우 기뻐하며 제출 후 채점하기를 눌렀는데...

 

 

array_set = list(set(array))
count_list = []
if len(array) == 1:
    answer = array[0]
else:
    for i in array_set:
        count_list.append([array.count(i), i])
    count_list.sort(reverse=True)
    if count_list[0][0] == count_list[1][0]:
        answer = -1
    else:
        answer = count_list[0][1]

return answer

 

3. 문제가 정답에 통과하지 못했다.. 광운님과 근혜님께 sos를 했다.

광운님이 array = [1,1,1] 과 같은 식의 오류를 발견해주셨다. (감사합니다..!!!)

* 오류가 생겼을 때는 '테스트 케이스 추가하기' 를 적극 활용하자! (ex. 값을 넣을 때는 맨 처음 값과 맨 끝의 값을 먼저 넣어보자. 본 값에서는 1-99, 0 등이 되겠다. 여기서도 풀리지 않는다면 제야의 고수님들께 sos를 요청하자) 

* 입출력 예시 = n , def solution(n) n을 항상 대입해두고 경우의 수를 찾아나가자. 예시에만 잘 맞아떨어져도 일단은 합격! (최qkfsha은 그것또한 뚫어버렸다... )

 

4. 새로 발견한  array = [1,1,1]  경우의 오류를 잡아보자.

 

 

 

 

 

 

 

문제를 풀다가 챗 GPT에게 하소연을 해봤다.. 

지피티야 공부 파트너로서는 최고이지만 위로는 잘 못하는구나..?

 

 

 

 

Comments