Python 48

[Python/BOJ] 백준 12100 2048(EASY)_확인방향을 어떻게 해야할지 _[DFS,백트래킹,구현]

복습 : 🎉 20220911 🐾 20220916 백트래킹 문제인데 숫자들을 상하좌우 각각 구분해서 다르게 합쳐주는 코드를 만드는 것이 쉽지않았다. 밑 그림과 같이 블록을 확인하면된다. 그 이유는 곰곰히 생각하면 알 수 있다. 상은 위로 블록들을 올리는데 동일한 값의 블록을 찾아야하고 이동하려는 쪽의 칸이 먼저 합쳐지기때문에 위에서 아래로 탐색한다. 좌를 설명해보면 왼쪽으로 블록을 옮기므로 블록이 합해지는 것이 왼쪽에서 오른쪽으로 탐색해야한다. 코드 : from collections import deque import copy def get(i,j) : if mp[i][j] : q.append(mp[i][j]) mp[i][j] = 0 def merge(i,j,di,dj) : # 보드에 있는 칸들을 돌면서 ..

[python]이차원 배열을 뒤집는 방법_zip(*list)

알고리즘을 풀다보면 이차원 배열을 뒤집어야하는 문제가 가끔 나온다. 그럴때마다 그때 그때 이해해서 적었지만 이것을 정리하고 싶어서 글을 쓴다. 1. " * " python에서 아스트리크(*)은 unpack역할을 한다. 첫줄은 이차원 배열 , 두번째 줄은 이차원 배열에서 *를 한 결과이다. 첫줄은 각 리스트들이 하나의 리스트로 연결되어있지만 두번째 줄은 리스트들이 unpack된것을 확인할 수 있다. 2. zip() zip은 iterable한 것들을 엮어준다. 지퍼를 올리는 것처럼 양측의 데이터를 짝을 지어준다. 아스트리크(*)와 zip을 함께 사용하면? 무슨 일이 일어날까? a = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] print(zip(*a)) print(list(zip(*a)))..

[Python/프로그래머스]섬 연결하기_Greedy(그리디)

https://programmers.co.kr/learn/courses/30/lessons/42861 코딩테스트 연습 - 섬 연결하기 4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4 programmers.co.kr Kruskal 알고리즘을 이용해 풀이하였다. 1. 비용이 작은 순으로 정렬한다. 2. connect set을 만들어 연결 여부를 확인한다. 3. while문을 통해 전부 연결될 때까지 돌린다. 3-1. cost에 이미 있으면 continue 3-2. cost에 없으면 connect 에 넣고 비용을 더한다. 4. 비용 반환 코드 : def solution(n, costs): answer = 0 costs.sort(key = lambda x : x[2]) # 비용..

[Python/프로그래머스]구명보트_Greedy(그리디)

https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 인덱스를 이용해서 풀이한다. 직접 pop해서 풀면 효율성에서 실패한다고 한다. 코드 : def solution(people, limit): answer = 0 people.sort() i ,j = 0, len(people)-1 # i : 가장 마른 사람, j : 가장 뚱뚱한 사람 while i

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

[Python/프로그래머스]위장_해시

https://programmers.co.kr/learn/courses/30/lessons/42578?language=python3 코딩테스트 연습 - 위장 programmers.co.kr 코드[참고 블로그] : def solution(clothes): answer = 1 closet = {} # dictionary for element in clothes : key = element[1] # 옷 종류 value = element[0] # 옷 이름 if key in closet : # 이미 있었던 옷 종류라면 ? closet[key].append(value) else : # 처음 들어온 옷 종류라면 ? closet[key] = [value] # list로 주어야 후에 append할 수 있다. for ke..