프로그래머스 67

[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/프로그래머스]단어변환_BFS

https://programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 1. 초기 큐에는 시작 단어와 변환한 횟수가 들어간다. 2. 하나씩 pop하면서 만약 target일 경우 cnt를 반환 3. target이 아니라면 방문하지 않은 words를 돌면서 한글자만 다른 단어를 찾는다. 4. 이것을 큐에 넣고 방문했음을 표시한다. 코드 : from collections import deque ..

[Python/프로그래머스]네트워크_(DFS,유니온파인드)

https://programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 문제 설명 : 문제를 보고 computers의 배열 설명이 잘 이해가 가지않았는데 몇번 읽어보고 이해했다. computers = [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 이렇게 computers가 있을 때 다음 그림과 같이 생각하면 된다. 1행 1열, 2행 2열, 3행 3열은 당연히 1이다. 자기자신과 자기 자신이기 때문이다. 그 이외에..

[Python/프로그래머스]타겟넘버_DFS

https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 programmers.co.kr 코드[블로그 참고] : def solution(numbers, target): answer = 0 def dfs(idx, val) : if idx == len(numbers) : # 주어진 수를 모두 사용 if val == target : nonlocal answer # 전역변수도 아닌데 지역변수 아님, 근데 이 수를 변경해야함 answe..

[Python/프로그래머스]베스트앨범_해시

https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 분명히 쉬워보여서 풀수있을 것같은데 못풀었다.. 딕셔너리를 2개 만들어야한 다는 생각을 했으면 쉽게 풀었을 것같다. 딕셔너리를 자유자재로 쓸수있도록 연습해야겠다. 코드 : def solution(genres, plays): answer = [] playdic = {} # {장르 : 총 재생 횟수} dic = {} # {장르 : [재생 횟수, 고유 번호]} fo..