파이썬 145

[Python/프로그래머스]뉴스 클러스터링_(KaKao)_Counter이용

https://school.programmers.co.kr/learn/courses/30/lessons/17677 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 교집합일 때는 min을, 합집합일 때는 max로 하는 걸 어떻게 하지 고민하다가 너무 답답해서 구글링한 문제 그냥 Counter에서 &, |를 하면 해결된단다..... 그 후에 counter에서 elements를 통해서 문자들을 개수 만큼 만들고 그것의 개수를 센다. 코드 : from collections import Counter def solution(str1, str2): str1 = str..

[Python/프로그래머스]튜플_(KaKao)_문제 이해가 잘 안되요

https://school.programmers.co.kr/learn/courses/30/lessons/64065 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🐾 20221013 문제가 이해가 잘 안되었다. 이게 무슨 소리람? 근데 질문하기에서 한 답변을 보고 이해가 갔다. [] 로 둘러쌓인 튜플은 순서가 달라지면 다른 튜플이지만 튜플로 만든 {}는 내부 순서가 달라져도 괜찮다!! 그러니까 [2,1]은 {1}을 만들 수 없다. [4,1,3,2]은 한자리수 {}로 4밖에 못만든다. 앞에서부터 밖에 못묶는다. 근데 묶고 나서는 그 안에서 순서를 바꿀 수 있..

[Python/프로그래머스]아이템 줍기_(BFS)

https://school.programmers.co.kr/learn/courses/30/lessons/87694 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🐾 20220924 테두리 처리 어떻게하지....? 를 생각하다 모르겠어서 구글링했다. 생각보다 간단한 방법을 쓴다. 내부일 경우 0으로 채우고 내부가 아닌경우 0이 아닌지 확인하고(다른 도형의 내부인지) 둘 다 아니면 1을 저장해 모서리라는 것을 알려준다. 그런데 다들 *2를 해서 왜들 이러나... 이해가 안됐는데 아래 참고 블로그를 보고 단번에 이해했다. 경계선이 인접할 경우 의도하지 않은 최..

[Python/프로그래머스]게임 맵 최단거리_(BFS)

https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 정말 쉽다. 그냥 BFS from collections import deque dx = [0,1,0,-1] dy = [1,0,-1,0] def solution(maps): q = deque([[0,0]]) n,m = len(maps), len(maps[0]) while q : x,y = q.popleft() for i in range(4) : nx,ny= x + dx[i], y + dy[i] if 0

[Python/프로그래머스]배달_다익스트라

https://school.programmers.co.kr/learn/courses/30/lessons/12978 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🐾 20221014 전형적인 다익스트라 문제 + 리스트 돌면서 k보다 작은 수 구해 return 하면 된다. 이 문제는 양방향이다!! 양방향인지 단방향인지 잘 보고 해야한다. 코드 : import heapq def dijkstra(distance,mp) : q = [] # dist는 0, node 시작 번호는 1 heapq.heappush(q,[0,1]) distance[1] = 0 while q..

[Python]다익스트라_최단경로알고리즘 (feat. heap)

다익스트라는 그리디와 DP의 유형으로 분류되는 최단경로 알고리즘이다. DP는 계속해서 그래프를 갱신하기 때문이고 그리디는 그 순간 가장 짧은 정점을 선택하기 때문이다. 음의 가중치가 적용될 수 없어 일상생활 문제에서 잘 사용될 수 있다. 특정한 한 노드에서 다른 모든 노드로 가는 최단 경로를 찾는 알고리즘이다. 원래는 O(V^2)의 시간복잡도를 가진다. ( 리스트 이용, 돌면서 가장 거리가 짧은 노드를 찾는 경우) 이것은 5,000개 까지는 괜찮지만 개수가 10,000개가 되면 시간초과가 될 가능성이 농후하다. (파이썬은 1초에 2천만 연산이라고 생각하면 됨) 시간초과를 막기 위해서 heap을 이용하면 된다. (방문하지 않은 최단거리의 정점을 찾을 때 이용) 파이썬의 minheap은 heappop을 하면..

[Python/프로그래머스]양궁대회_Bfs

https://school.programmers.co.kr/learn/courses/30/lessons/92342 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🐾 2022-10-20 라이언이 이기려면 1. (해당 점수에 )어피치보다 많이 쏘기 2. (해당 점수에 쏠 )화살 아껴서 다른 화살에 몰빵하기 이 경우를 나누어서 deque에 넣는다. - 만약 n발 보다 많이 쏘면? continue - 마지막에 쏜다면 남은 화살 다 쏘기 - 만약 n발이라면 lion, apeach의 점수를 구해서 가장 큰 GAP을 만드는 화살의 리스트를 res에 넣기 focus는 ..

[Python/프로그래머스]k진수에서 소수 개수 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/92335?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🐾 20221021 1. k진수로 변환 2. 소수 찾아 개수 구하기 코드 : def solution(n, k): word = "" # k 진수로 변환 while n : word = str(n%k) + word n = n//k word = word.split('0') cnt = 0 for w in word : # 빈공간이라면 if len(w) == 0 : continu..

그리디_회의실 배정, 씨름선수, 창고 정리, 침몰하는 타이타닉, 증가순열만들기, 역수열

그리디는 탐욕적인 이라는 의미로 지금 현재 가장 최적의 것을 계속 골르는 것이다. 주로 정렬과 함께 한다. 회의실 배정 코드 : if __name__=="__main__" : n = int(input()) meeting = [list(map(int,input().split())) for _ in range(n)] meeting.sort(key = lambda x : (x[1],x[0])) endTime,cnt = 0,0 for s,e in meeting : if s >= endTime : cnt +=1 endTime = e print(cnt) => 끝나는 시간을 오름차순으로 정렬한 후 시작시간이 이전 회의의 끝나는 시간보다 늦거나 같으면 해당 회의를 넣는다. 씨름 선수 코드 : if __name__=="..

[Python/백준]ABCDE(DFS)

유니온 파인드인줄 알았는데 아니었다. DFS 였다. 그저 A,B,C,D,E 가 각각 한명씩만 친구 관계로 연결되어있는 것을 확인하면 된다. 즉, DFS의 깊이가 4인지 확인하는 문제다. A - B(depth == 1) - C(depth == 2) - D(depth == 3) - E(depth == 4) if finish : return 을 통해 시간을 줄여준다. 이미 finish가 True라면 깊이가 4인 dfs를 돌았다는 것이고 추가로 확인하지않아도 되기 때문이다. 코드 : def dfs(now, depth) : global finish if finish : return # 왔음을 표시 vis[now] = 1 if depth == 4 : finish = 1 return # 친구 목록을 돌면서 for i..