목록Python (138)
나의 개발일지
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/131127 🔑 Counter 클래스 사용 내가 원하는 물건 : 개수 형태로 딕셔너리를 생성 i번째 날 ~ i+10일 까지 살 수 있는 물건을 Counter 클래스를 사용해 구한다. 1번에서 생성한 딕셔너리와 2번에서 생성된 딕셔너리가 같으면 answer += 1 from collections import Counter def solution(want, number, discount): answer = 0 want_counter = {} for i in range(len(want)): want_counter[want[i]] = number[i] # 사고싶은 물건 : 개수 for i in ran..
문제 : https://www.acmicpc.net/problem/21939 🔑 최소 힙, 최대 힙 사용 가장 어려운 문제 추천하기 위한 최대 힙 가장 쉬운 문제 추천하기 위한 최소 힙 💡 solved 명령이 들어오면 바로 빼지 않음 solved 1000 명령이라면 문제 리스트에서 1000을 찾고 빼야 하는데 이 과정이 시간 오래 걸림 그래서 solved한 문제는 따로 리스트에 보관하고 추천할 때 solved_list에 있으면 heappop 하는 방식 사용 같은 문제 번호에 다른 난이도가 새로 들어올 수 있으니까 solved_list에는 (문제 번호, 난이도)를 같이 저장해야 함 이때 해당 문제 번호의 난이도를 찾기 위해 딕셔너리를 사용 {문제번호 : 난이도} from heapq import heappo..
문제 : https://www.acmicpc.net/problem/20440 🔑 딕셔너리 key에 시간, value에 모기 마리 수 저장 딕셔너리 생성 들어온 시간 value값에는 모기 마리 수를 더한다. 나간 시간 value값에는 모기 마리 수를 뺀다. 정렬 딕셔너리 key, value 값으로 오름차순 정렬한다. 정렬된 리스트에서 최댓값 찾기 모기 마릿수를 순서대로 더해가면서 최댓값을 계속 업데이트한다. 마지막으로 업데이트된 인덱스와 시간을 저장 최댓값 인덱스 부터 모기가 모두 나간 시점 찾기 value가 0 미만인 값을 찾으면 해당하는 시간 저장하고 브레이크 최댓값, 가장 많은 모기가 있는 시작 시간, 끝시간을 출력하면 끝 ✨ from collections import defaultdict impor..
문제 : https://www.acmicpc.net/problem/24337 🔑 a, b를 만족하는 건물 먼저 세우기 n, a, b = 10, 6, 3 일 때 1 ~ a-1까지 건물을 먼저 짓는다. [1, 2, 3, 4, 5] 그다음 가장 높은 건물을 짓는다. max(a, b) = 6 [1, 2, 3, 4, 5, 6] b-1 ~ 1까지 건물을 마저 짓는다. [1, 2, 3, 4, 5, 6, 2, 1] 10개를 세워야 하는데 8개의 건물이 세워져 있다. 건물 2개를 현재 만족하고 있는 조건을 해치지 않고 추가해야 한다. 출력되는 숫자를 가장 작게 만들기 위해서는 1을 왼쪽 편에 추가해야 한다. 하지만 가장 왼쪽에 1을 추가하는 것이 아닌 1번 인덱스에 추가해야 한다. n, a, b = 10, 1, 9 일 ..
문제 : https://www.acmicpc.net/problem/1436 🔑 in 연산자 숫자를 666부터 시작 숫자에 666이 들어있는지 확인 str()로 형변환 후 in 연산자 적용 666이 들어간 숫자 n개를 찾을 때까지 숫자를 1씩 증가시키면서 반복 n = int(input()) title = 666 cnt = 0 while cnt != n: if '666' in str(title): cnt += 1 title += 1 print(title-1)
문제 : https://www.acmicpc.net/problem/17299 🔑 스택, 입력받은 숫자 리스트 역순으로 순회 먼저 입력받은 숫자들의 개수를 센다. 리스트 순회하면서 count() 함수로 셀 수도 있지만 collections 모듈의 Counter 클래스로 간단하게 셀 수 있다. 리스트의 값을 역순으로 스택에 넣는 이유 스택에 현재 들어온 숫자의 바로 밑에 있는 숫자가 현재 들어온 숫자의 개수보다 많은 것 중 가장 왼쪽의 값으로 만들기 위함 from collections import Counter n = int(input()) numbers = list(map(int, input().split())) cnt = Counter(numbers) # 숫자의 개수 세기 stack = [] answer..
문제 : https://www.acmicpc.net/problem/5549 🔑 누적합 정글, 바다, 얼음의 누적합을 구할 2차원 리스트 3개를 만든다. 지도를 순회하면서 누적합을 구한다. 구한 누적합 리스트를 통해 조사를 해서 정글, 바다, 얼음의 수를 구하면 끝 ✨ import sys input = sys.stdin.readline m, n = map(int, input().split()) k = int(input()) MAP = [list(input().strip()) for i in range(m)] J = [[0] * (n+1) for _ in range(m+1)] # 정글 O = [[0] * (n+1) for _ in range(m+1)] # 바다 I = [[0] * (n+1) for _ in ..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77485 🔑 테두리를 회전하는 방법 현재 위치의 값을 다음 위치로 옮기기 X 현재 위치에 이전 위치의 값을 옮기기 O 먼저 시작 위치의 값은 따로 저장을 해야 함 1. 왼쪽 테두리 현재 행 아래쪽의 값을 현재 행으로 당김 board[r][c1] = board[r+1][c1] 이때 시작 위치의 값이 사라지기 때문에 따로 저장해 둔 것 2. 아래쪽 테두리 현재 열 오른쪽의 값을 현재 열로 당김 board[r2][c] = board[r2][c+1] 3. 오른쪽 테두리 현재 행 위쪽의 값을 현재 행으로 당김 board[r][c2] = board[r-1][c2] 4. 위쪽 테두리 현재 열 왼쪽의 값을..