반응형

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

import heapq
def solution(operations):
    answer = []
    while operations:
        o, num = operations.pop(0).split()
        if o == "I":
            heapq.heappush(answer, int(num))
        elif answer and o == "D" and int(num) > 0:
            answer.pop()
        elif answer and o == "D" and int(num) < 0:
            answer.pop(0)
        answer.sort()
    if answer:
        return [answer[-1], answer[0]]
    else:
        return [0,0]

 

 

반응형
반응형

 

 

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

사실 조건은 4개로 보아야 함

 

 

 

 

오랜만에 +2점...!

 

from functools import cmp_to_key
def cmp_sum(x, y):
    return y[1] - x[1]
def cmp_by_condition(x, y):
    x_index, x_play = x
    y_index, y_play = y
    if x_play == y_play:
        return x_index - y_index
    else:
        return y_play - x_play

def solution(genres, plays):
    answer = []
    _dict1 = dict()
    _dict2 = dict()
    for i, (genre, play) in enumerate(zip(genres, plays)) :
        if genre not in _dict1.keys():
            _dict1[genre] = [(i, play)]
            _dict2[genre] = play
        else:
            _dict1[genre].append((i, play))
            _dict2[genre] += play
    tmp = sorted(_dict2.items(), key=cmp_to_key(cmp_sum))
    for (genre, _) in tmp:
        new = [x[0] for x in sorted(_dict1[genre], key=cmp_to_key(cmp_by_condition))]
        answer += new[:2]
    return answer

 

 

추천풀이 중 내가 생각했던 방법이랑 비슷했던 풀이

 

def solution(genres, plays):
    answer = []

    dic1 = {}
    dic2 = {}

    for i, (g, p) in enumerate(zip(genres, plays)):
        if g not in dic1:
            dic1[g] = [(i, p)]
        else:
            dic1[g].append((i, p))

        if g not in dic2:
            dic2[g] = p
        else:
            dic2[g] += p

    for (k, v) in sorted(dic2.items(), key=lambda x:x[1], reverse=True):
        for (i, p) in sorted(dic1[k], key=lambda x:x[1], reverse=True)[:2]:
            answer.append(i)

    return answer
반응형
반응형

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

** 시도중

from collections import deque

def solution(n, results):
    win_graph = [ [] for i in range(n + 1) ]
    lose_graph = [ [] for i in range(n + 1) ]
    wn_c = [ 0 for i in range(n + 1) ]
    for result in results:
        win_graph[result[0]].append(result[1])
        lose_graph[result[1]].append(result[0])
    queue = deque()
    queue.append(results[0][0])
    answer = 0
    print(win_graph)
    print(lose_graph)
    while queue:
        now = queue.popleft()
        print(now)
        for loser in win_graph[now]:
            if wn_c[loser] == 0:
                queue.append(loser)
                wn_c[loser] -= 1
    print(wn_c)
    return answer

 

 

 

def solution(n, results):
    wins, loses = {}, {}
    for i in range(1, n+1):
        wins[i], loses[i] = set(), set()      
    
    for i in range(1, n+1):                   
        for r in results:                      
            if r[0] == i:                      
                wins[i].add(r[1])
            if r[1] == i:
                loses[i].add(r[0])
                
        # i번째 사람을 이겼던 사람들에게 i번째 사람이 이겼던 사람 추가
        for winner in loses[i]:              
            wins[winner].update(wins[i])
            
        # i번째 사람에게 진 사람들에게 i번째 사람이 졌던 사람 추가
        for loser in wins[i]:
            loses[loser].update(loses[i]) 
            
    cnt = 0
    for i in range(1, n+1):                   
        if len(wins[i]) + len(loses[i]) == n-1:
            cnt += 1
    return cnt

 

참고: https://bladejun.tistory.com/111

 

프로그래머스 순위 (python, 파이썬)

문제 설명 n명의 권투선수가 권투 대회에 참여했고 각각 1번부터 n번까지 번호를 받았습니다. 권투 경기는 1대1 방식으로 진행이 되고, 만약 A 선수가 B 선수보다 실력이 좋다면 A 선수는 B 선수를

bladejun.tistory.com

 

반응형
반응형

 

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

from collections import deque

def solution(n, edge):
    graph = [[] for i in range(n + 1)]
    node_count = [0 for i in range(n + 1)]
    for i, e in enumerate(edge):
        graph[e[0]].append(e[1])
        graph[e[1]].append(e[0])
    
    node_count[1] = 1
    queue = deque()
    queue.append(1)
    
    while queue:
        now = queue.popleft()
        for g in graph[now]:
            if node_count[g] == 0:
                queue.append(g)
                node_count[g] = node_count[now] + 1
    
    max_count = max(node_count)
    return node_count.count(max_count)

 

 

 

 

반응형
반응형

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

def solution(triangle):
    answer = triangle[0][0]
    if len(triangle) == 1:
        return answer
    d = [[0] * (i + 1) for i in range(len(triangle))]
    d[0][0] = triangle[0][0]
    for i in range(1, len(triangle)):
        for j in range(len(triangle[i])):
            if j == 0: # 삼각형 i열 0번째
                d[i][j] = d[i-1][j] + triangle[i][j];
            elif j == i: # 삼각형 i열 마지막
                d[i][j] = d[i-1][j-1] + triangle[i][j];
            else:
                d[i][j] = max(d[i-1][j-1], d[i-1][j]) + triangle[i][j];
            answer = max(answer, d[i][j]);
    return answer

 

 

 

 

** 추천 많이 받은 것 중에 제일 좋았던 풀이

def solution(triangle):
    for t in range(1, len(triangle)):
        for i in range(t+1):
            if i == 0:
                triangle[t][0] += triangle[t-1][0]
            elif i == t:
                triangle[t][-1] += triangle[t-1][-1]
            else:
                triangle[t][i] += max(triangle[t-1][i-1], triangle[t-1][i])
    return max(triangle[-1])

 

방식은 똑같은데 1) 더 간결하고 2) 내 식보다 효율적이고 3) 이게 dp에 맞아서 가져옴

 

반응형
반응형

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

MySQL 문제들은 아쉽게도 점수가 없어 순위에 영향을 주지 않는다.

 

SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID IN (
    SELECT HOST_ID
    FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(*) > 1
)
ORDER BY ID ASC;

 

 

 

참고: https://thispointer.com/mysql-select-where-count-is-greater-than-one-solved/

 

MySQL Select where Count is greater than one [Solved] – thispointer.com

In this article, we will be looking into the count() function with select statement and conditions. Table of Contents Select where count is greater than one : using HAVING ClauseSelect where count is greater than one : using JOINSSelect where count is grea

thispointer.com

 

 

반응형

+ Recent posts