본문 바로가기

PROGRAMMERS26

[프로그래머스/파이썬] [1차] 프렌즈4블록 내 풀이 요약(1) 네모 삭제    - 모든 점을 하나씩 돌면서 네모 형태로 블록이 같으면 to_delete에 인덱스 저장.    - 저장된 인덱스는 다 돈 후 check에 1로 표시. 매번 하면 겹치는 경우를 잡을 수 없음.    - check가 1로 표시된 것이 없으면 끝(2) 빈 공간 없이 아래로 내리기    - 존재하는 블록을 뜻하는 0이 삭제한 블록을 뜻하는 1 위에 있으면 둘이 자리를 바꿈.    - 0, 0이 겹쳐있고 그 아래 1이 있는 경우 한 번으로는 부족하기 때문에 더 이상 움직이지 않을 때까지 반복.       *e.g. 0>0>1>1>0 은 0>1>1>0>0 이므로 추가 실행 필요(3) 삭제된 블록 1의 개수를 정답으로 리턴 내 풀이def solution(m, n, _board): .. 2025. 2. 18.
[프로그래머스/파이썬] 2 x n 타일링 풀이 방법 요약- 피보나치 수열로 접근 내 풀이 코드 (성공)from collections import dequedef solution(n): # 2까지는 수열 규칙을 적용할 수 없기에 그대로. if n   실패 코드 (정확성 13/14, 효율성 0/6)import mathdef solution(n): answer = 0 k = 0 while n >= k: answer += math.comb(n, k) % 1000000007 n -= 1 k += 1 return answer % 1000000007  메모왜 1,000,000,007로 나눠야 되는지! 다른 수로 나누면 안 되는지!를 챗지피티한테 따지듯 물었는데 '소수라 역원 계산이 가능.. 2025. 2. 14.
[프로그래머스/파이썬] 오픈채팅방 풀이 방법 요약- record를 순회하여 딕셔너리로 uid:닉네임 페어 관리 및 result에 순서대로 추가- 마지막 uid 딕셔너리로 닉네임을 매치하여 answer에 추가해 리턴 내 풀이 코드def solution(record): answer = [] results = [] uid_dict = {} message = {"Enter":"님이 들어왔습니다.", "Leave":"님이 나갔습니다."} for rec in record: r = rec.split() if len(r) > 2 : # Leave에는 nickname이 없기 때문 uid_dict[r[1]] = r[2] # uid:nickname if r[0] in.. 2025. 2. 14.
[프로그래머스/파이썬] 파일명 정렬 풀이 방법 요약- {파일명 : [헤드, 넘버, 기존 순서]} 로 딕셔너리 구성- 넘버, 기존 순서 순으로 정렬하여 키 값을 순서대로 리턴. 내 풀이 코드import redef solution(files): answer = [] file_dict = {} for org_index, file in enumerate(files): head = re.match("[\D]+", file).group().lower() # 숫자가 아닌 헤드 num = int(re.search("[0-9]+", file).group()) # 숫자인 넘버 file_dict[file] = [head, num, org_index] # 헤드와 넘버가 같다면 기존 순서 순대로 .. 2025. 2. 13.
[프로그래머스/파이썬] 숫자 변환하기 풀이 방법 요약- DFS로 여러 갈래로 뻗어가면서 그 숫자와 카운트 저장- y와 같아질 때 카운트 남겨두고 가장 작은 수 리턴 내 풀이 코드from collections import dequedef solution(x, y, n): ans_list = [] queue = deque() queue.append((x,0)) visited = set() while queue: num, count = queue.popleft() # 숫자가 y와 같아지면 카운트 저장 if num == y: ans_list.append(count) count += 1 # 방문했던 갈래면 .. 2025. 2. 13.
[프로그래머스/파이썬] 충돌위험 감지 내 풀이def solution(points, routes): answer = 0 # 최대 100*100으로 초기화하여 시간:횟수를 각 위치에 저장하여 # 횟수가 2 이상이면 로봇이 2기 이상 같은 시간에 존재했다는 뜻으로 충돌 카운트+=1 maps = [[{} for _ in range(101)] for _ in range(101)] for route in routes: count = 0 for i in range(len(route)-1): start, end = points[route[i]-1], points[route[i+1]-1] # 시작과 끝 설정 current = start.copy(.. 2025. 2. 10.