알고리즘2022. 2. 27. 22:01
728x90

* 정렬은 출제 빈도높고, 평균 점수높다고 한다. (출처 : 프로그래머스)

 

--------------------------------------------------------------------------------------------------------------

 

[ 문제 ]

https://programmers.co.kr/learn/courses/30/lessons/42748

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

 

[ 코드 ]

def solution(array, commands):
    answer = []
    # com을 읽어온다. ex.[2, 5, 3]
    for com in commands:
        a, b, c = com
        ''' (위와 같은 코드)
        a = com[0]   ex. 2
        b = com[1]   ex. 5
        c = com[2]   ex. 3
        '''
        
        # 리스트 슬라이싱을 [시작:끝] 이렇게 했다면 시작~끝-1까지 담김
        arr = array[a-1:b] #2~5번째임. 인덱스에서는 1~4.
        sort_arr = sorted(arr) # 정렬
        
        # answer리스트에 추가해줌
        answer.append(sort_arr[c-1])
        
        #(참고) 이런 식으로 바로 쓰기도 가능!
        #answer.append(sorted(arr)[c-1])
    return answer

 

 

[ 참고자료 ]

파이썬 리스트 슬라이싱, append 가 헷갈린다면 아래 글이 도움될 것!

https://mminky.tistory.com/121

 

[ Python ] 리스트 추가, 삭제, 슬라이싱

* 리스트 추가 .append() * 리스트 원소 삭제 .pop .remove del * 리스트 슬라이싱 1) 이용방법 이렇게 이용하면 (시작)~(끝-1)까지의 항목들이 담긴다. 리스트명[시작:끝] 이런 리스트가 있다고 가정해보자

mminky.tistory.com

 

반응형
Posted by mminky
알고리즘2022. 2. 27. 21:47
728x90

[ 문제 ]

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

 

[ 코드 ]

def solution(clothes):
    dic={}
    c = 1
    
    # ["yellowhat", "headgear"] 이러한 items를 읽어옴
    for items in clothes:
        if items[1] in dic: # "headgear"가 이미 dic={} 안에 있다면
            dic[items[1]] += 1 # "headgear": +1
        else:               # "headgear"가 처음 나왔다면
            dic[items[1]] = 1  # "headgear" : 1
    
    #print(dic)	 #결과 {'headgear': 2, 'eyewear': 1}
    for v in dic.values(): # 여기서 2, 1을 의미
        c = c* (v+1)  # 안 쓴 경우까지 고려하기 위해 v+1
        # ex. headgear의 경우 "yellowhat", "bluesunglasses", "안 씀" (총 3가지)
        
    #for k, v in dic.items(): #(참고) 이렇게 key,value 이용 가능
    #    print(k," ",v)
    
    return c-1 # 최소 한 개 이상은 입음. 다 안 입는 경우 -1

 

경우의 수를 계산하는 법을 알아야 한다!

 

반응형
Posted by mminky
알고리즘2022. 2. 26. 21:39
728x90

* 해시는 파이썬의 딕셔너리로 구현한다.

즉, 해시 문제'딕셔너리'를 이용하기!!

 

* 출제 빈도높고 점수보통 이라고 한다. (출처: 프로그래머스)

 

 

[ 문제 ]

문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

제한사항
  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

https://programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

 

 

[ 풀이 ]

def solution(participant, completion):
    dic = {} # '해시' : 딕셔너리 이용
    
    # 참가자 이름별로 세기 (동명이인 두 명이면 2)
    for i in participant:
        if i in dic.keys():
            dic[i] += 1
        else:
            dic[i] = 1
    #return dic #결과값 {"leo":1,"kiki":1,"eden":1}
    
    # 완주자 명단에 있으면 -1
    for j in completion:
        if j in dic.keys():
            dic[j] -= 1
    #return dic #결과값 {"leo":1,"kiki":0,"eden":0}
    
    for k in dic:
        if dic[k] == 1: # != 0 이 더 정확할 것 같다. (0이 완주이기 때문)
            return k

 

반응형
Posted by mminky