[프로그래머스 / 파이썬 풀이] 콜라 문제 def solution(a, b, n): answer = (n // a) * b remain = answer + (n % a) while True: answer += (remain // a) * b remain = (remain // a) * b + (remain % a) if remain < a: break return answer 처음에 바꾼 병을 넣고 while문 실행. 남은 병이 내야 할 병보다 적으면 break Programmers 2023.01.17
[프로그래머스 / 파이썬 풀이] 옹알이(2) def solution(babbling): answer = 0 say = ["aya", "ye", "woo", "ma"] for i in babbling: for j in say: if j*2 not in i: i=i.replace(j, ' ') print(i) if i.strip() == '': answer += 1 return answer 반복되는 단어를 제외하고, 가능한 발음을 공백으로 치환시킨다. 공백을 했을 때 빈 문자열이면 answer += 1 Programmers 2023.01.15
[프로그래머스 / 파이썬 풀이] 햄버거 만들기 # 1,2,3,1 빵야채고기빵 def solution(ingredient): answer = 0 x = 0 while len(ingredient) >= 4: flag = 0 for i in range(x, len(ingredient)-3): if ingredient[i:i+4] == [1, 2, 3, 1]: answer += 1 del ingredient[i:i+4] x = i-3 flag = 1 break if flag == 0: break return answer 처음에는 탐색 구간 설정을 잘 못 해서 시간초과가 발생. while을 순회 하면서 탐색구간을 재 설정해주면 된다. Programmers 2023.01.14
[프로그래머스 / 파이썬 풀이] 아이템 줍기 from collections import deque def solution(rectangle, characterX, characterY, itemX, itemY): answer = 0 rec = [[0] * 101 for _ in range(101)] visited = [[0] * 101 for _ in range(101)] for coor in rectangle: lx, ly, rx, ry = coor for i in range(ly*2, ry*2+1): for j in range(lx*2, rx*2+1): rec[i][j] = 1 for coor in rectangle: lx, ly, rx, ry = coor for i in range(ly*2 + 1, ry*2): for j in range(lx*.. Programmers 2023.01.13
[프로그래머스 / 파이썬 풀이] 전력망을 둘로 나누기 from collections import deque def solution(n, wires): min = 10000000000 # 원본이 바뀌지 않도록 배열을 새로 복사를 해주고 pop(i)를 통해 줄을 하나씩 끊는다. for i in range(n-1): global visited wires2 = wires[::] graph = [[] for _ in range(n+1)] wires2.pop(i) visited = [0] * (n+1) for j in wires2: graph[j[0]].append(j[1]) graph[j[1]].append(j[0]) def dfs(i): global visited global cnt visited[i] = 1 for j in graph[i]: if visited[.. Programmers 2023.01.12
[프로그래머스 / 파이썬 풀이] 가장 큰 수 첫시도. from itertools import permutations def solution(numbers): answer = '' a = list(map(str, numbers)) b = permutations(a, len(numbers)) max_n = 0 for i in b: c = ''.join(i) if max_n < int(c): max_n = int(c) answer = str(max_n) return answer 테스트 케이스 몇개를 제외하곤 전부 시간초과가 나버린 케이스 (예상은 했지만 더 좋은 방법이 생각나지 않아 그냥 풀어봤다.) 다른 풀이(통과 코드) def solution(numbers): answer = '' num = list(map(str, numbers)) num.sort.. Programmers 2023.01.11
[프로그래머스 / 파이썬 풀이] 가장 먼 노드 from collections import deque def solution(n, edge): answer = 0 graph = [[] for _ in range(n+1)] visited = [0] * (n+1) q = deque() for i in edge: graph[i[0]].append(i[1]) graph[i[1]].append(i[0]) q.append(1) visited[1] = 1 while q: n = q.popleft() for j in graph[n]: if visited[j] == 0: visited[j] = visited[n] + 1 q.append(j) answer = visited.count(max(visited)) return answer 처음엔 dfs로 시도 했다가 실패. .. Programmers 2023.01.10
[프로그래머스 / 파이썬 풀이] 네트워크 def solution(n, computers): global arr answer = 0 arr = [[] for _ in range(n)] visited = [0] * n for i in range(n): for j in range(n): if computers[i][j] != 0 and i != j: arr[i].append(j) def dfs(a): global arr for i in arr[a]: if visited[i] == 0: visited[i] = 1 dfs(i) for q in range(n): if visited[q] == 0: dfs(q) answer += 1 return answer 그래프를 활용한 dfs풀이. 우선 양방향 그래프와 컴퓨터 개수에 맞춰 방문 배열을 만들어 준 후 df.. Programmers 2023.01.09
[프로그래머스 / 파이썬 풀이] 게임 맵 최단거리 from collections import deque def solution(maps): visited = [[0] * len(maps[0]) for _ in range(len(maps))] visited[0][0] = 1 q = deque() q.append((0, 0)) while q: cy, cx = q.popleft() for dy, dx in [(0, 1), (1, 0), (0, -1), (-1, 0)]: ny = cy + dy nx = cx + dx if 0 Programmers 2023.01.09
[프로그래머스 / 파이썬 풀이] 모음사전 풀이 1 from itertools import product def solution(word): answer = 0 words = ['A', 'E', 'I', 'O', 'U'] ans_lst = [] for i in range(1, len(words) + 1): for j in product(words, repeat = i): ans_lst.append(''.join(list(j))) ans_lst.sort() answer = ans_lst.index(word) + 1 return answer itertools 모듈의 product 함수(중복순열)를 사용. 해당 된 모음들의 모든 순열을 구한 뒤 정렬하여 인덱스를 통해 위치를 찾아준다. 풀이 2 def solution(word): global answe.. Programmers 2023.01.06