본문 바로가기

전체 글95

프로그래머스 기지국 설치(자바) 난이도 LV3 풀이 import java.util.*; class Solution { public int solution(int n, int[] stations, int w) { int answer = 0; Queue sq = new LinkedList(); for(int s:stations) sq.offer(s); int position = 1; while(position 2023. 3. 14.
RabbitMQ 적용기 RabbitMQ 적용하기 이번 프로젝트에서 배치 서버에서 주기적으로 크롤링 서버를 호출해서 최신 크롤링 정보를 크롤링 해온 다음에 이것을 DB에 저장하는 로직이 있었다. 이때 여러 문제점이 발생해서 이를 해결하기 위한 목적으로 RabbitMQ를 추가하게 되었는데 이에 대해 포스팅하고자 한다. 이 프로젝트에서 크롤링 데이터를 크롤링해서 DB에 Insert하는 로직 이 프로젝트에서 최신 크롤링 데이터를 크롤링 해오는 크롤링 로직은 다음 그림과 같다. (1) 배치 서버에서 20분 간격으로 크롤링 서버를 호출한다. 이때 DB에서 가져온 마지막 크롤링 데이터의 URL 값도 넘겨준다(크롤링 서버가 최신 크롤링 데이터만 가져오도록 하기 위해서) (2) 크롤링 서버는 크롤링 데이터의 URL을 비교해서 최신 크롤링 정보.. 2023. 3. 13.
조회 API에 캐시 적용하기 조회 API에 캐시 적용하기 애플리케이션 서버의 조회 성능을 끌어올리기 위한 방법으로 캐시가 존재한다. 스프링 부트 기반의 프로젝트를 진행하다가 메인 페이지의 크롤링 컨텐츠 조회 API가 요청마다 반복적으로 외부 Disk 기반의 DB서버에서 응답 데이터를 받아와야 했다. 이를 개선하기 위해서 로컬 캐시를 적용하고 더 나아가 글로벌 캐시까지 적용하게 되었다 이 글에서는 본 프로젝트에서 캐시를 도입한 과정에 대해서 포스팅하고자 한다. 캐시란? 캐시는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 저장소를 가리킨다. 캐시의 접근 시간에 비해서 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 어떤 캐시를 적용할지? 캐시는 크게 두가지 로컬 캐시와 글.. 2023. 3. 13.
프로그래머스 수식 최대화(2020 카카오 인턴십) 🗯️ 난이도 LV2 🗯️ 풀이 from itertools import permutations def operation(num1, num2, op): if op == '+': return str(int(num1) + int(num2)) elif op == '-': return str(int(num1) - int(num2)) else: return str(int(num1) * int(num2)) def caculate(exp): arr = [] tmp = "" for i in exp: if i.isdigit() == True: tmp += i else: arr.append(tmp) arr.append(i) tmp = "" arr.append(tmp) return arr def solution(expressi.. 2023. 3. 10.
프로그래머스 키패드 누르기(2020 카카오 인턴십) 난이도 LV1 풀이 구현 문제였다. 키패드를 딕셔너리형의 자료구조를 이용해서 구현을 한 다음, 거리를 구해줘서 해당 조건에 맞게 코드를 작성하면 된다. def solution(numbers, hand): answer = '' leftPos = '*' rightPos = '#' phone = { 1: (0, 0), 2: (0, 1), 3: (0, 2), 4: (1, 0), 5: (1, 1), 6: (1, 2), 7: (2, 0), 8: (2, 1), 9: (2, 2), '*': (3, 0), 0: (3, 1), '#': (3, 2) } for num in numbers: if num == 1 or num == 4 or num == 7 or num == '*': answer += 'L' leftPos = n.. 2023. 3. 10.
BOJ 2023번 - 신기한 소수 난이도 골드 V 풀이 import sys input=sys.stdin.readline N=int(input()) def isPrime(n): if n 2023. 3. 5.
BOJ 1913번 - 달팽이 난이도 실버 III 풀이 구현 문제이다. 주어진 표에 달팽이 모양으로 숫자를 채워야 하는데 이 로직을 생각하는데 좀 어려웠다. dx와 dy 배열을 두어서 그래프 좌표를 이동하도록 두고, 방향을 바꿔주는 것은 그래프의 범위를 넘어갈때 4를 나눠서 나머지를 통해서 dx,dy를 한칸씩 이동하도록 구현해주었다. import sys input = sys.stdin.readline N=int(input()) num=int(input()) snail=[[0]*N for _ in range(N)] x,y=0,0 target_x,target_y=0,0 direction=0 dx=[1,0,-1,0] dy=[0,1,0,-1] cnt=N**2 snail[x][y]=cnt cnt-=1 while cnt>0: nx=x+dx[di.. 2023. 3. 5.
BOJ 17478번 - 재귀함수가 뭔가요? - 자바, 파이썬 난이도 실버 V 풀이 재귀함수에 대해서 연습할 수 있는 문제였다. 반복되는 부분을 찾아낸 다음에 재귀함수를 이용해서 반복적으로 출력될 수 있도록 코드를 구현해줬다. "재귀함수가 뭔가요?" "잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어. 마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지. 그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어." 라고 답변하였지. 크게 위의 부분이 반복되었고 반복 횟수마다 앞에 '____'이 달라지므로 이를 적절하게 출력되도록 구현하였다. 파이썬 풀이 import sys input=sys.stdin.readline N=int(input()) print('어느 한 컴퓨터공.. 2023. 3. 5.
BOJ 3613번 - Java vs C++ 난이도 실버 III 풀이 문자열 구현 문제이다. C++형식과 Java형식 둘 다 아닌경우 에러를 반환시키는 경우를 다 찾는게 좀 까다로웠다. 예외처리한 경우는 다음과 같다. Java형식인데 첫글자가 대문자인 경우 C++형식인데 대문자가 속해있는 경우 C++형식인데 연속으로 '_'가 있는 경우 C++형식인데 첫번째 글자, 마지막 글자가 '_'인 경우 이 경우에 속한 경우 "Error!"를 반환하도록 처리해주면 된다. import sys input=sys.stdin.readline variable=input().rstrip() def Java_to_C(letter): tmp=[] tmp.append(letter[0]) if letter[0].isupper(): return "Error!" for i in r.. 2023. 3. 3.