본문 바로가기

전체 글

[programmers] 카펫 로직 brown + yellow로 가능한 곱 조합을 나타낸다. 이후 for문을 돌면서 양옆, 위아래 1개씩 (총 2개씩) 빼서 곱한 값이 yellow면 답이다 코드 def solution(brown, yellow): total = brown + yellow possible = [] for i in range(total, 2, -1): if total % i == 0 and i >= total // i: possible.append([i, total // i]) for i in possible: if (i[0] - 2) * (i[1] - 2) == yellow: return i 더보기
[programmers] 단속카메라 로직 - 경로가 큰거부터 둔 다음에 단속 카메라를 앞쪽에 두면 뒤에 경로랑 겹치는 것이 있다면, check에 표시한다 코드 def solution(routes): routes = sorted(routes, reverse=True) check = [0] * len(routes) cnt = 0 camera = 0 for i in range(len(routes)): if check[i] == 0: camera = routes[i][0] cnt += 1 for j in range(i + 1, len(routes)): if routes[j][0] 더보기
[programmers] 후보키 로직 1. 우선 가능한 열의 조합을 모두 만든다(itertools.combination) 2. 각각 유일하게 식별이 가능한지 확인한다. (unique함수 사용) 3. 유일한 것들 중에 최소성을 만족하는 것만 남긴다 -> 부분집합 사용 코드 from itertools import combinations from copy import deepcopy def solution(relation): def unique(row, co): check = [] for item in relation: check.append(tuple(item[idx] for idx in co)) if len(set(check)) == row: return True return False row = len(relation) column =.. 더보기
[programmers] 다리를 지나는 트럭 로직 다리를 건너는 트럭(bridge), 대기트럭(truck_weights)를 while문을 돌면서 초가 변할때 마다 변경해준다. 이때, bridge = [0] * bridge_length를 해서 이동하는 것을 하나씩 보여준다. bridge의 합이랑 truck_weights의 첫번째 값(=bridge에 들어갈 값)을 더했을 때, weight보다 작거나 같으면 bridge에 넣어준다. 이때 bridge의 칸을 한칸씩 옮긴다(pop(0)을 통해) bridge변화 과정 time bridge truck_weights 0초 [0, 0] [7, 4, 5, 6] 1초 [0, 7] [4, 5, 6] 2초 [7, 0] [4, 5, 6] 3초 [0, 4] [5, 6] 4초 [4, 5] [6] 5초 [5, 0] [6] 6초.. 더보기
[programmers] 네트워크 로직 문제가 처음에 잘 이해가 안갔다,,,(난 바보다.,,) n = 3 computers = [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 답 : 2 -> why? 1,2가 하나의 네트워크, 3이 하나의 네트워크 n = 3 computers = [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 답 : 1 -> why? 1,2,3이 하나의 네트워크 - visit으로 확인하면서 bfs를 사용한다. 방문한 곳(i)은 visit[i] = 1로 바꿔주고 bfs를 이용하면서 연결된 부분을 찾아낸다. bfs문에 들어간 횟수 = 네트워크 갯수이다. 따라서 while을 한번 다 돌면 cnt += 1을 해준다 코드 from collections import deque def solution(n, .. 더보기
[programmers] 파일명 정렬 로직 - ls = [(head, numbers, 몇번째 파일인지), (head, numbers, 몇번째 파일인지), (head, numbers, 몇번째 파일인지)] 정렬한 후 sort한다. - ls만드는 방법 1) 정규식 사용 2) for문 돌리면서 직접 구현(내 코드) -> 이때, head, numbers의 index를 하나씩 바꿔가면서 최종적인 값 내기 - head : 숫자가 나오기 마지막 문자인 곳 numbers : 앞에서부터 숫자가 나온곳부터 시작해서 다시 문자열 나오기 바로전까지 tail : 굳이 나타낼 필요없다 -> tail로는 정렬하지 않기 때문 - 몇번째 파일인지 작성하는 이유 : 두 파일의 HEAD 부분과, NUMBER의 숫자도 같을 경우, 정렬 후에도 입력 시 주어진 두 파일의 순서가 .. 더보기
[programmers] 오픈채팅방 로직 - uid로 사람을 구분하기 위해서 dictionary에 key와 value값으로 하면 바뀔 때 값만 알아서 바꿔준다. - uid를 통해 enter, leave를 다 표현한 후, 마지막에 uid에 맞는 최종 이름을 넣어준다. 코드 def solution(record): answer = [] users = {} # {'uid1234':'M', 'uid1234':'P'} temp = [] # [['uid1234', '님이 들어왔습니다.' ]] -> 이후에 uid가 최종적으로 결정나면 그 값을 바꿔주기 for rec in record: log = rec.split(' ') enter = '님이 들어왔습니다.' leave = '님이 나갔습니다.' if log[0] == 'Enter': users[log[1.. 더보기
[programmers] 뉴스 클러스터링 로직 1. one, two를 대문자로 통일한 후, 합집합, 교집합을 구한다. ** 문제점 : union, interaction은 set일 때 사용가능 - set하게 되면 만약, one = ['AA', 'AA'], two = ['AA', 'AA', 'AA']라면 set_one = set_two = {'AA'}로 동일해진다 ** 해결책 : 1) Counter함수 사용해서 union, interaction를 사용한다. 2) make_interaction함수를 만들어 교집합만 구하면 one, two, interaction(one, two)갯수로 합집합을 구한다. 나는 2)을 택했다. 코드 def solution(str1, str2): def make_split(word): answer = [] for i in .. 더보기