코테 43

[Python/프로그래머스]큰 수 만들기__Greedy(그리디)

https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr while (최근에 넣은 수 보다 지금 넣는 수가 더 크다면 ): pop을 해준다. 그게 현재 가장 최적의 값이니까!! 코드 : def solution(number, k): answer = [] for num in number : while k > 0 and answer and answer[-1] < num : answer.pop() k -= 1 answer.append(num) return ''.join(answer[:len(answer)-k]) 문제를 풀고 든 생각 : 왜 반환할 때 [:len(answer)-k]일까? 그냥 [:-k] ..

[Python/프로그래머스]조이스틱_Greedy(그리디)

https://programmers.co.kr/learn/courses/30/lessons/42860 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 코드 : def solution(name): # 조이스틱 조작 횟수 answer = 0 # 기본 최소 좌우이동 횟수는 길이 - 1 min_move = len(name) - 1 for i, char in enumerate(name): # 해당 알파벳 변경 최솟값 추가 answer += min(ord(char) - ord('A'), ord('Z'..

[Python/프로그래머스] 등굣길_DP

https://programmers.co.kr/learn/courses/30/lessons/42898 코딩테스트 연습 - 등굣길 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = programmers.co.kr 문제 설명 : 왼쪽 그림과 같이 진행된다. (1,1)에서 시작하여 우측, 아래로 이동한다. 경로의 개수를 반환하는 것으로 왼쪽과 위의 합을 새로운 값으로 지정한다. 중간에 웅덩이는 무시하고 넘어간다. 도착 위치의 값을 반환하면 된다. 코드 : def solution(m, n, puddles): answer = 0 # puddle 이 (m,n)으로 주어..

[Python/프로그래머스]카펫_완전탐색

https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 programmers.co.kr (가로 - 2) * (세로 - 2) = yellow 라는 것을 그림을 그려서 생각해보면 알 수 있다. 코드 : def solution(brown, yellow): s = brown + yellow for i in range(s,2,-1) : # s에서 2 이전까지 -1씩 감소시키며 i를 구한다. if s%i == 0: # i 가 가로일 수 있다. a = s ..

[Python/프로그래머스] 체육복_그리디

https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 그리디 : 결정을 해야 할 때 그 순간 최적의 해를 선택하며 최종 해답에 도달한다. 그 순간 가장 좋지만, 전체적으로는 아닐 수도있기에 검증이 필요하다. 이 문제의 핵심은 왼쪽 학생 먼저 확인하는 것이다. 왼쪽을 먼저 확인하고 체육복을 주는 것이 더 많은 아이들이 체육복을 입을 수 있다. 그 이유는 왼쪽 부터 set을 확인하기 때문이다. 오른쪽 먼저 확인한다면 왼..

[Python/프로그래머스]여행경로_DFS_(🐶삽질_깊은복사,얕은복사)

https://programmers.co.kr/learn/courses/30/lessons/43164 코딩테스트 연습 - 여행경로 [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] programmers.co.kr 코드 : from collections import defaultdict def solution(tickets): answer = [] n = len(tickets) def init_graph() : routes = defaultdict(list) # 디포트값이 list인 딕셔너리 for key, value in tickets ..

[Python/프로그래머스]완주하지 못한 선수 _해시

https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 백준에도 동일한 문제가 있을것이다. 풀었던 기억이 있다. 근데 이번에는 못풀었다... 코드 : from collections import Counter def solution(participant, completion): answer=Counter(participant) - Counter(completion) return list(answer..

[Python/프로그래머스]입국심사 _이분탐색

https://programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr 1. left와 right 값 정의 2. left와 right을 적절히 자르고 최적의 mid값을 찾도록 코드를 만든다. 코드 : def solution(n, times): answer = 0 left, right = 1, max(times) * n # right은 가장 오래걸리는 심사관에게 모두 받을 경우의 시간 while left = n : # 이미 해야할 사람..

[Python/프로그래머스]정수 삼각형 _DP

문제 : https://programmers.co.kr/learn/courses/30/lessons/43105 코딩테스트 연습 - 정수 삼각형 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 programmers.co.kr 코드 : def solution(triangle): answer = 0 for i in range(1, len(triangle)) : for j in range(len(triangle[i])) : if j == 0 : # 왼쪽 끝 원소 triangle[i][j] += triangle[i-1][j] elif j == len(triangle[i])-1 : # 오른쪽 끝의 원소 triangle[i][j] += triangle[i-1]..

[Python/프로그래머스]N으로 표현 _DP

https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr 코드 : def solution(N, number): answer = -1 dp = [] for i in range(1,9) : # N을 i번 사용 all_case = set() check_number = int(str(N)*i) #N 반복 (i 번 만큼) all_case.add(check_number) for j in range(0,i-1) : # dp에는 i-1만큼이 있음 for op1 in dp[j] : for op2 in dp[-j-1] : all_case.add(op1 - op2) all_case.add(op1 + op2) all_..