본문 바로가기

분류 전체보기202

분할 정복 (쿼드 트리) 백준 1992 import sys N = int(sys.stdin.readline()) Narr = [] for i in range(N) : Narr.append(list(map(int,sys.stdin.readline().strip()))) def DFS(x,y,size) : global answerarr color = Narr[x][y] for i in range(x,x+size) : for j in range(y,y+size) : if Narr[i][j] != color: print("(",end= "") DFS(x,y,size//2) DFS(x,y+size//2,size//2) DFS(x+size//2,y,size//2) DFS(x+size//2,y+size//2,size//2) print(")".. 2024. 2. 25.
정보처리기사 실기 집중 공부할 부분 기출문제를 풀며, 먼저 부족한 부분을 정리하겠다. 1단원 UML 다이어그램 - 리팩토링 2단원 UI의 여구 사항. 3단원 갱신 - schema 관계대수 rollback,undo,redo, 갱신의 차이. 복구 trasaction. . 설계 과정. 4단원 포인터 오라클 테스트 운영체제 update문 -> 존재하지 않는 것만 추가. 테스트. 리눅스 명령어. 5단원 시험에 최근 가장 많이나오며, 집중 공부 필요. 2024. 2. 23.
동기, 비동기 / WEBFLUX, MONO 프로젝트를 진행하며, 비동기적으로 진행하자는 팀 의견(많은 사람들이 요청할 것이라는 가정), 그리고 PORTONE의 SRC를 직접 받아서 사용하는 형태로 인해 그 형태의 틀을 따라야 하는데, 그 틀이 비동기였던 이유로 전 과정을 비동기적으로 진행하게 되었다. 동기/ 비동기 동기: 작업 a,b,c가 있다면, a이후 , a의 종료를 기다리고 b -> c를 진행한다 비동기: a이후, a의 종료 동안 b를 진행하고, b가 종료되면 callback되어 그 떄로 돌아가고, 그 이후 b,c를 진행한다. 이 돌아가는 것, 즉 일꾼을 쓰레드(프로세스의 작업단위가 된다) 라고 한다. WEBFLUX란? implementation 'org.springframework.boot:spring-boot-starter-webflux.. 2024. 2. 23.
SERVICE/CONTROLLER단 분할, 그에 따른 비동기적 형태 변경 이전 목표에 따라 , 1. TOKEN을 매 요청마다 생성(POSTONE 측의 TOKEN이, 굉장히 자주 만료된다) 2. SERVICE와 CONTROLLER단, 그리고 내부적인 역할 분담을 진행하겠다. @Service @NoArgsConstructor @Slf4j public class AccessTokenService { private final WebClient webClient = WebClient.builder().baseUrl("https://api.portone.io").build(); private final ObjectMapper objectMapper = new ObjectMapper(); public Mono GetToken() { PortoneTokenRequest portoneToke.. 2024. 2. 23.
FRONT에서의 결제 + 결제 정보 저장 현재까지 수 없이 고민한 내용은, 결제를 어떻게 진행 할 것인가 였다. 모든 결제를 BACKEND단에서 진행하자니, 많은 정책상의 문제. 그리고 또 결제가 정상적으로 진행 되었는지 사용자에게 친화적이지 않다는 문제가 있었다. 그렇다고 FRONTEND단에서만 사용하자니, 금액에 대한 관리가 우리 서버에서 전혀 진행할 수 없는 형태가 된다. POINT만을 사용하는 결제는, 결제의 기본이 남에게 확인을 받아야한다는 것을 고려했을때, 결제가 아닐 수 도 있다. 현재 그러므로 회의끝에 내린 결론은 웹하드처럼, 포인트를 구매해서(FRONT단에서) 이 포인트로 상품을 사자! 이를 위해 , 기존에 PURCHASEJSV2로 두었던 JS단에서 가장 먼저 구매 내역을 저장하게 하였다 . @Table(name = "Payme.. 2024. 2. 22.
그리디 알고리즘 경주마같은, 상남자 같은 문제라고 생각하면 개념이 쉽다. 문제에서 생각했던 것처럼, 동전으로 값을 맞출때 가장 큰 금액부터 넣으면 되는 경우 이다 . 가장 큰 값의 동전부터 , 지금 최선인 것부터 일단 진행하는 것이다. 어떻게 최적의 해가 될 수 있을까? 당연히, 당상 최적이 항상 전체의 최적은 아니다 . 선택의 조건 ? 1. 현재 선택이 이후 선택에 영향을 주지 않는다. a->b->c로 갈때, a->b로 어떤 비용으로 가든, b->c로 가는데 영향을 주지 않는다 2. 부분의 최적해를 모으면 전체의 최적이 된다. a->c까지의 최적해는, a->b+b->c의 최적이된다. 백준 11047 import sys N,K = map(int,sys.stdin.readline().split()) coinlist = [.. 2024. 2. 21.
yaml 파일 연습 1. container apiVersion: apps/v1 kind: Deployment metadata: labels: app: redis name: redis spec: replicas: 1 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - image: redis:alpine name: redis ports: - containerPort: 6379 name: redis volumeMounts: - mountPath: /data name: redis-data volumes: - name: redis-data emptyDir: {} 1. apiVersion은, v1, apps/v1 2. k.. 2024. 2. 21.
Portone을 활용한 수기 결제(백엔드 단에 전 권한 이임) @RestController @RequiredArgsConstructor @Slf4j public class HandWritePayController { private final WebClient webClient = WebClient.builder().baseUrl("https://api.portone.io").build(); private final String mytoken = @PostMapping("/handwritepay") public Mono HandWritePay() { MethodDto handwritemethod = new MethodDto( new CardDto (new CredentialDTO("testcard", 2026, 11) )); PaymentAmount amount = .. 2024. 2. 21.
DP2 - 수열의 값을 계산하기 백준 11659 import sys N,M = map(int,sys.stdin.readline().split()) Nlist = [0]+list(map(int,sys.stdin.readline().split())) for i in range(M) : answerlist = list(map(int,sys.stdin.readline().split())) sumnum = 0 for j in range(answerlist[0],answerlist[1]+1) : sumnum = sumnum+Nlist[j] print(sumnum) N,M이 1000000이 되며, 이로 인해 시간복잡도가 거의 O(100000000000)일 것으로 예상된다. 이는 당연히 시간제한 1초에게 걸릴 것이다. 그래서 풀이를 변경하였다 . N.. 2024. 2. 20.
WEBFLUX 프로젝트에서 결제요청(정책상 문제로, 사용 카드 정보를 개인이 저장할 수 없어 open api를 호출해야만 한다) 에 대한 문제로 인하여 , webflux를 자주 사용하게 되었다. 그 과정에서 모르는 내용이 계속 등장하여, 이렇게 정리하게 되었다. WEBCLINET는, REST API를 위한 것으로 , 마치 REQUEST를 보내는 CLIENT처럼 동작할 수 있다. 1. 간단한 생성 webclient.create(String baseurl)로 생성할 수 있다. 2. 기타 다른 정보를 추가하려면, builder.build를 사용하자 private final WebClient webClient = WebClient.builder().baseUrl("https://api.portone.io").build(); .. 2024. 2. 18.