[프로그래머스] 09/15 (6)

2021. 9. 15. 17:15·코딩테스트/프로그래머스[Python]

[복서 정렬하기]-[6주차 위클리 챌린지]

My answer

def solution(weights, head2head):
    wins, con1, tmp2 = [], [], []
    tmp=0
    
    for i in range(len(head2head)):
        # (승률= 이긴경기 / 전체경기)을 저장
        if('W' in head2head[i])or('L' in head2head[i]):
            wins.append(head2head[i].count('W')/(len(head2head)-head2head[i].count('N')))
        else:
            wins.append(0.0)
        # 자기보다 몸무게 높은사람한테 이긴횟수를 저장
        for j in range(len(weights)):
            if(weights[j]>weights[i] and head2head[i][j]=='W'):
                tmp+=1
        con1.append(tmp)
        tmp=0
    # 2중 리스트로 하나의 리스트에 승률,무거운사람한테 이긴횟수, 몸무게, 번호로 저장
    for i in range(len(head2head)):
        tmp2.append([wins[i],con1[i],weights[i],i+1])
    # 이제 정렬된 tmp2에서 번호만 1씩 더해서 출력하면 끝
    return [i[3] for i in sorted(tmp2,key=lambda x:(-x[0],-x[1],-x[2],x[3]))]

[2016년]

My answer

def solution(a, b):
    month=[31,29,31,30,31,30,31,31,30,31,30,31]
    day=['THU','FRI','SAT','SUN','MON','TUE','WED']
    
    tmp=sum(month[:a-1])+b
    
    return day[tmp%7]

[두개 뽑아서 더하기]-[월간 코드 챌린지 시즌 1]

def solution(numbers):
    answer = set()
    
    for i in range(len(numbers)):
        for j in range(i+1,len(numbers)):
            answer.add(numbers[i]+numbers[j])
    return sorted(list(answer))
더보기

마지막 return에서 list(sorted(answer))을 하면 답이 안나오는데, 이유는 집합을 정렬하면 음수는 마지막으로 정렬된다. 따라서 먼저 리스트로 변환해준뒤 정렬해야 올바르게 정렬이 된다.

[예산]-[Summer/Winter Coding(~2018)]

My answer

def solution(d, budget):  
    for i in range(len(d)):
        if(sum(d)>budget):
            d.remove(max(d))
        else:
            return len(d)

Another answer

def solution(d, budget):
    d.sort()
    while budget < sum(d):
        d.pop()
    return len(d)
----------------------------------------
def solution(d, budget): 
    d.sort() 
    answer=0 
    for i in d: 
    	if budget < i: 
        	break 
        budget-=i 
        answer+=1 
    return answer
더보기

첫번째 코드는 나랑 같은 방법을 이용했는데, sort를 하고 난 뒤에 계산해서 max를 계속 구해줄 필요가 없다.

즉 내 코드보다 효율성이 좋다.

두번째 코드는 sum도 사용하지 않아서 위의 두 코드보다 효율성이 더 좋다

[3진법 뒤집기]-[월간 코드 챌린지 시즌 1]

My answer

def solution(n):
    answer = 0
    tmp=[]
    while(n!=0):
        tmp.append(n%3)
        n//=3
    for i in range(len(tmp)):
        answer+=3**(len(tmp)-i-1)*tmp[i]
    return answer

Another answer

def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3
    # int함수를 이용하여 int(해당진법문자열,해당진법)을 정수=10진법수로 변환해준다.
    answer = int(tmp, 3)
    return answer

[약수의 갯수와 덧셈]-[월간 코드 챌린지 시즌 2]

My answer

def solution(left, right):
    answer = count = 0
    for i in range(left,right+1):
        for j in range(1,i+1):
            if(i%j==0):
                count+=1
       # 아래 if/else문을 한줄로 요약할 수 있담
        answer+=i if count%2==0 else -i
       # if(count%2==0):
        #    answer+=i
       # else:
         #   answer-=i
        count=0
    return answer

Another answer

def solution(left, right):
    answer = 0
    for i in range(left,right+1):
    # 약수의 개수가 홀수려면 제곱수라는 것을 이용한 방법
        if int(i**0.5)==i**0.5:
            answer -= i
        else:
            answer += i
    return answer

[실패율]-[2019 KAKAO BLIND RECRUITMENT]

My answer

def solution(N, stages):
    answer = []
    fail = []
    total = 0
    
    for i in range(1,N+1):
        for j in range(len(stages)):
            # 해당스테이지를 도전한 총 사용자 수 계산
            if(stages[j]>=i):
                total+=1
        # 해당 스테이지를 아직 클리어하지 못한사람 / 해당스테이지를 도전한 총 사용자수
        # 스테이지를 아무도 못도달했으면 total=0이라서 0으로 나눌 수 없으므로 실패율을 0으로 넣는다
        if(total!=0):
            fail.append(stages.count(i)/total)
        else:
            fail.append(0)
        total=0
    # 스테이지랑 실패율을 리스트로 합침
    for i in range(N):
        answer.append([i+1,fail[i]])
    return [i[0] for i in sorted(answer,key=lambda x:(-x[1],x[0]))]

Another answer

def solution(N, stages):
    answer = []
    fail = []
    info = [0] * (N + 2)
    
    for stage in stages:
    # 해당 스테이지에 몇명이 머무는지를 info에 저장
        info[stage] += 1
    for i in range(N):
    # be에 해당 스테이지에 도전한 사람들을 저장 
        be = sum(info[(i + 1):])
    # yet에 해당 스테이지를 못깬 사람을 저장
        yet = info[i + 1]
        if be == 0:
            fail.append((str(i + 1), 0))
        else:
            fail.append((str(i + 1), yet / be))
            
    return [int(i[0]) for i in sorted(fail,key=lambda x:-x[1])]
----------------------------------------------------------------------
def solution(N, stages):
    result = {}
    denominator = len(stages)
    for stage in range(1, N+1):
        if denominator != 0:
            count = stages.count(stage)
            result[stage] = count / denominator
            denominator -= count
        else:
            result[stage] = 0
    return sorted(result, key=lambda x : result[x], reverse=True)
더보기

내 코드보다 아래 코드가 훨씬 시간이 빨리걸린다. 우선 나는 중첩반복문에다가 모든수를 비교하는 경우까지 하기때문에 효율성이 매우떨어지는데 아래 코드는 그냥 리스트를 만들어두고 거기다가 하나씩 카운팅해서 더했다.

 

728x90

'코딩테스트 > 프로그래머스[Python]' 카테고리의 다른 글

[프로그래머스] 09/17 (6)  (0) 2021.09.22
[프로그래머스] 09/16 (3)  (0) 2021.09.16
[프로그래머스] 09/14 (3)  (0) 2021.09.14
[프로그래머스] 09/13 (3)  (0) 2021.09.13
[프로그래머스] 09/09 (3)  (0) 2021.09.09
'코딩테스트/프로그래머스[Python]' 카테고리의 다른 글
  • [프로그래머스] 09/17 (6)
  • [프로그래머스] 09/16 (3)
  • [프로그래머스] 09/14 (3)
  • [프로그래머스] 09/13 (3)
창빵맨
창빵맨
  • 창빵맨
    Let's be Developers
    창빵맨
    로그인/로그아웃
  • 전체
    오늘
    어제
    • 분류 전체보기 (471)
      • 알쓸신잡 (79)
      • ML & DL (85)
        • Computer v.. (22)
        • NLP (22)
        • 파이썬 머신러닝 완.. (3)
        • 개념정리 (38)
      • 리눅스 (21)
      • 프로젝트 (29)
        • 산불 발생 예측 (6)
        • 음성비서 (12)
        • pdf 병합 프로그.. (0)
        • 수위 예측 (5)
        • 가짜 뉴스 분류 (5)
        • 전력사용량 예측 (1)
      • 코딩테스트 (217)
        • 프로그래머스[Pyt.. (17)
        • 프로그래머스[Fai.. (3)
        • 백준[Python] (160)
        • 이것이취업을위한코딩.. (18)
        • 파이썬 알고리즘 (19)
      • 데이터분석실습 (25)
        • 데이터 과학 기반의.. (18)
        • 헬로 데이터 과학 (7)
      • 메모장 (0)
      • 잡담 (4)
  • Personal

    GITHUB
    Instagram
  • 공지사항

  • 인기 글

  • 태그

    이것이취업을위한코딩테스트다
    DFS
    나동빈
    이분탐색
    dp
    백준
    파이썬
    이코테
    그리디
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3

HOME

HOME

상단으로

티스토리툴바