[프로그래머스] 09/16 (3)

2021. 9. 16. 18:25·코딩테스트/프로그래머스[Python]

[폰켓몬]-[찾아라 프로그래밍 마스터]

My answer

def solution(nums):
    tmp=set(nums)
    
    if(len(nums)/2>=len(tmp)):
        return len(tmp)
    else:
        return len(nums)//2

Another answer

def solution(nums):
    return min(len(set(nums)), len(nums)//2)

[체육복]-[탐욕법(Greedy)]

My answer

def solution(n, lost, reserve):
    answer = 0
    cloth = [1]*n
    
    for i in lost:
        cloth[i-1]-=1
    for i in reserve:
        cloth[i-1]+=1     
    i=0   
    
    while(i!=len(cloth)):
        if(cloth[i]>1):
            if(i==0):
                if(cloth[i+1]==0):
                    cloth[i]-=1
                    cloth[i+1]+=1
            elif(i==len(cloth)-1):
                if(cloth[i-1]==0):
                    cloth[i]-=1
                    cloth[i-1]+=1
            else:
                if(cloth[i-1]==0):
                    cloth[i]-=1
                    cloth[i-1]+=1
                    continue
                elif(cloth[i+1]==0):
                    cloth[i]-=1
                    cloth[i+1]+=1
                    continue
        i+=1
    answer=cloth.count(1)+cloth.count(2)
            
    return answer
더보기

탐욕법(Greedy)

미래를 생각하지 않고 각 단계에서 가장 최선의 선택을 하는 기법으로, 각 단계에서 최선의 선택을 한 것이 전체적으로도 최선이길 바라는 알고리즘이다. 따라서 특정 문제를 만났을 때 단순히 현재 상황에서 가장 좋아보이는 최적의 해만 선택해도 문제를 정상적으로 풀어낼 수 있는지 파악해야 한다.

Another answer

def solution(n, lost, reserve):
    reserved = 0
    # 차집합의 성질을 이용
    # 옷이 아예 없는 사람 
    lostN = list(set(lost) - set(reserve))
    # 여분의 옷이 있는 사람 
    reserveN = list(set(reserve) - set(lost))
    lostN.sort()
    for l in lostN:
        for x in range(l-1, l+2):
        # 여분의 옷이 있는 사람중 
            if x in reserveN:
            # 제거하고 reserved(옷이 있는사람) 수를 늘림 
                reserveN.remove(x)
                reserved += 1
                break
    return n - len(lostN) + reserved
--------------------------------------------------------------------
def solution(n, lost, reserve):
    _reserve = [r for r in reserve if r not in lost]
    _lost = [l for l in lost if l not in reserve]
    for r in _reserve:
        f = r - 1
        b = r + 1
        if f in _lost:
            _lost.remove(f)
        elif b in _lost:
            _lost.remove(b)
    return n - len(_lost)
더보기

내 코드는 우선 O(n)의 시간복잡도를 가지고있는 것 같고, 2번째 코드는 O(n^3), 3번째 코드는 O(n^2)의 시간복잡도를 가진다. 우선 2,3번째 코드는 똑같은 방법이다. 여분이 있는 사람과 옷이 아예 없는 사람을 미리 구분해두고 remove를 이용하여 계산하였다. 내 코드가 시간은 더빠르지만 코드가 지저분해보인다는 단점이 있는 것 같다.

[모의고사]-[완전탐색]

My answer

def solution(answers):
    answer,score=[],[0]*3
    
    stu=[[1,2,3,4,5],[2,1,2,3,2,4,2,5],[3,3,1,1,2,2,4,4,5,5]]
        
    for i in range(len(answers)):
        for j in range(len(stu)):
            if(answers[i]==stu[j][i%len(stu[j])]):
                score[j]+=1  
                
    for i in range(len(score)):
        if(max(score)==score[i]):
            answer.append(i+1)
        
    return answer

Another 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]

enumerate는 "열거하다"라는 뜻으로 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 돌려준다.

728x90

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

[프로그래머스] 09/24 (2)  (0) 2021.09.24
[프로그래머스] 09/17 (6)  (0) 2021.09.22
[프로그래머스] 09/15 (6)  (0) 2021.09.15
[프로그래머스] 09/14 (3)  (0) 2021.09.14
[프로그래머스] 09/13 (3)  (0) 2021.09.13
'코딩테스트/프로그래머스[Python]' 카테고리의 다른 글
  • [프로그래머스] 09/24 (2)
  • [프로그래머스] 09/17 (6)
  • [프로그래머스] 09/15 (6)
  • [프로그래머스] 09/14 (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
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

HOME

HOME

상단으로

티스토리툴바