개발/코테

[5일차] 프로그래머스 - 최빈값 구하기, 직각삼각형 출력하기, 주사위의 개수, 중복된 숫자 개수

su-mmer 2023. 10. 30. 15:37
728x90

최빈값 구하기


풀이

def solution(array):
    count = [0]*(max(array)+1)
    
    for i in array:
        count[i] += 1
    alot = -1
    for i in count:
        if alot < i:
            alot = i

    return count.index(alot) if count.count(alot) == 1 else -1

코딩을 C로 시작한 터라.. 이런 방법밖에는 생각나지 않았다..

array의 최대값 크기만큼 count 배열을 생성한다.

array의 값이 나올 때마다 count 배열의 인덱스에서 +1을 한다.

count 배열의 가장 큰 값이 최빈값이다.

가장 큰 값이 2개 이상이면 -1을 리턴한다.

 

다른 풀이

def solution(array):
    while len(array) != 0:
        for i, a in enumerate(set(array)):
            array.remove(a)
        if i == 0: return a
    return -1

하... 파이썬은 아는 만큼 보인다 진짜로.. 이게 뭐람

  • enumerate() 함수는 리스트를 인덱스와 값을 가진 set으로 바꾼다.
  • set(array)로 집합을 만든다. 예를 들어 array가 [80,80,80,9,9]라면 set(array)는 {80,9}가 된다.
  • array에서 80과 9를 하나씩 지우면 array에 [80,80,9]가 남는다.
  • 같은 방식을 반복하면 array에 [80]만 남고 i에 0, a에 80이 대입된 채 for문이 끝난다.
  • [80,9]가 남았다면 i는 1, a에는 9가 대입되어 있을 것이다. 따라서 최빈값이 여러개이므로 -1을 리턴하게 된다.

 

직각삼각형 출력하기


풀이

n = int(input())
for i in range(1,n+1):
    print('*'*i)

처음에 for 문 두 개 써서 풀었는데..ㅎ..

 

주사위의 개수


풀이

def solution(box, n):
    answer = 1
    for i in box:
        answer *= i//n
    return answer

부피를 사용해 계산한다.

i//n은 한 변에 주사위가 몇 개 들어갈 수 있는지를 나타낸다.

세 변에 최대 몇 개가 들어갈 수 있는지 계산하여 곱하면 주사위의 최대 개수가 된다.

 

다른 풀이

def solution(box, n):
    x, y, z = box
    return (x // n) * (y // n) * (z // n)

 

중복된 숫자 개수


풀이

def solution(array, n):
    return array.count(n)

count() 함수로 배열에서 해당 원소가 몇개 있는지 리턴할 수 있다.

728x90