본문 바로가기

전체 글144

[swea] 4615 재미있는 오셀로 게임 재미있는 문제라서 들고 왔습니다. 1. 해당 방향으로 쭉 탐색하면서 해당 칸 놓는 돌로 변경. 2.1 만약 끝에 같은 돌이 없다면, 다시 원래대로. 2.2 만약 끝에 같은 돌이 있다면, 그대로 유지 dfs를 이용해서 풀었습니다. t = int(input()) directions = [[0,1],[0,-1], [1,0],[-1,0],[1,1],[-1,-1],[1,-1],[-1,1]] def dfs(board, y,x, dy, dx, c, n): if y = n or x >= n: return True if board[y][x] == 0: return True if board[y][x] == c and board[y][x] != 0: return False tmp = boa.. 2023. 5. 20.
[프로그래머스] 블록 이동하기 bfs를 이용하여 해결했습니다. bfs에 들어가는 값으로는 [[로봇위치1, 로봇위치2], 시간] 이 들어갑니다. 그리고 위치1의 값은 위치2보다 항상 작습니다. [[0,0],[0,1]] [[0,0],[1,0]] 문제는 다음에 방문할 위치에 대한 정보입니다. 회전에 대해서는 정사각형을 만들어서 처리했습니다. 만약 이 사각형에 1이 있다면 회전을 하지 못한다는 것을 의미합니다. 1이 없고 회전시킨 위치를 방문하지 않았다면, 큐에 (현재 시간+1)과 회전시킨 위치를 넣어줍니다. 방문했는 지 확인하기 위해서 set을 이용했습니다. 문제는 list는 set에 들어갈 수 없기 때문에 tuple로 바꿔서 넣었습니다. 상하좌우는 일반적인 bfs문제와 동일하게 처리했습니다. 큐에서 꺼낸 위치에서 보드의 맨 마지막 위치가.. 2023. 3. 7.
@Transactional, Connection Pool deadlock 최근에 회사에서 푸시 시스템 관련 일을 하던 중에, RDS의 connection pool이 모자란 현상이 발생했습니다. kafka를 이용하는 시스템에서 prodcuer 2대 consumer 2대를 이용하니, 3대까지 연결은 되는데 마지막 한 대가 연결이 안되는 에러가 발생했습니다. 이는 rds의 connection pool을 넘어서 그렇습니다. 그래서 producer의 connection pool을 4개로 줄여서 해결했습니다. 진짜로 해결이 된 것일까요? 사실 connection pool을 감소시킨 producer보다는 consumer부분이 더 신경쓰였습니다. 왜냐하면 consumer가 batch 단위로 데이터를 받아오고 각각의 데이터 검사를 위해 thread를 이용합니다. 즉, batch 크기 만큼 t.. 2023. 2. 17.
[프로그래머스] 표 병합 이번 문제는 3단계 같지 않은 문제입니다. 단순하게 생각해서 각각의 셀을 그룹으로 지정합니다. 그리고 각 그룹의 값을 저장하고 있는 딕셔너리를 만듭니다. 그래서 업데이트를 할 경우에는 해당 셀의 그룹을 가져와서 딕셔너리의 값을 업데이트합니다. merge는 모든 셀 중에서 merge하고자 하는 그룹에 해당하면, 그룹을 대상 그룹으로 업데이트 합니다. 2500 * 1000 이기 때문에 충분히 가능합니다. unmerge는 그룹에 해당한다면, 새로운 값으로 그룹을 할당해줍니다. 중복되지 않게 하기 위해서 자기 위치에 해당하는 값을 넣어줍니다. dic = {i : "" for i in range(50*50)} board = [[j*50 + i for i in range(50)] for j in range(50)].. 2023. 2. 16.
[프로그래머스] 표현 가능한 이진 트리 이번 문제는 완전탐색에 대한 문제입니다. 일단 포화 이진 트리로 만들고, 탐색을 시작합니다. 루트노드부터 시작해서 제일 왼쪽 리프노트의 부모노드까지 내려옵니다. 이 서브트리가 올바른 트리인 지 확인합니다. 어려운 점은 자식노드나 부모노드 간의 이동이 어려웠습니다. from collections import deque import itertools import math flag = True def solution(numbers): answer = [] for i in numbers: if i == 1: answer.append(1) else: an = ans(dec_to_bin(i)) if an == -1: an =0 answer.append(an) return answer def dec_to_bin(nu.. 2023. 2. 15.
[Kafka] partition, consumer, producer 관계 (2) 이번에는 두 대의 서버와 local kafka를 이용하여 실험해 본다. kafka는 docker를 이용하여 실행한다. producer @Async //항상 1 전송 public void prodcue1(String mm){ kafkaTemplate.send("fcm",Integer.toString(new Random().nextInt()), mm); System.out.println(String.format("pro %s %s", mm, Thread.currentThread().getId())); } @Async //항상 2 전송 public void produce2(String mm){ kafkaTemplate.send("fcm", Integer.toString(new Random().nextInt().. 2023. 2. 8.