Programming 85

프로그래머스 - 명예의전당(1) JAVA 문제풀이

문제 설명 "명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니다. 즉 프로그램 시작 이후 초기에 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르게 됩니다. k일 다음부터는 출연 가수의 점수가 기존의 명예의 전당 목록의 k번째 순위의 가수 점수보다 더 높으면, 출연 가수의 점수가 명예의 전당에 오르게 되고 기존의 k번째 순위의 점수는 명예의 전당에서 내려오게 됩니다. 이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어, k = 3이고, 7일 동안 진행된 가수..

JavaScript - HTML onClick 파라미터로 Object 넘기기

개요 동적으로 태그에 하위 요소를 넣어야하는 작업이 있었는데, onClick 이벤트로 Object를 전부 넘기고 싶었다. 하지만 onClick 이벤트로 함수를 만들어 넘길 때 Object를 콘솔로 확인해보니 [Object Object] 로 뜨며 정상적인 상태가 아니었다. 해결방법 구글링에선 다양한 방법들이 제시되었지만, 딱히 유효한 방법을 찾지못하다가 생각난게 dataset 이다. onClick=functionName(this) data-value=object 식으로 넘기면 가능할거같았다. 예제코드 const htmlTable = $("#table"); for(...) { htmlTable.append(` `); } 그냥 Object를 넘기면 값이 제대로 넘어가지 않아서 JSON.stringfy로 문자열..

디자인 패턴 - SOLID

SOLID 원칙이란? SRP (Single responsibility principle) : 단일 책임 원칙이라 하며, 클래스는 단 한개의 책임만을 가져야 한다 는 뜻입니다 예를 들어 Add Class 가 있고 이 클래스는 사칙연산 중 더하기에 해당하는 책임만을 져야합니다. 빼기, 나누기, 곱하기 등 다른 연산의 책임을 가지지 않아야 하는 원칙인데, 복잡한 요구사항을 필요로 하는 프로그램에서 단 한가지의 책임만을 지키기는 어렵습니다. 이 원칙을 무조건 지켜야하는 강제적인 룰이 아닌, 되도록이면 최대한 지키면서 설계를 해야하는 것이 올바른 접근방식이라고 생각합니다. OCP (Open closed priciple) : 개방 폐쇄 원칙이라 하며, '개방' 이란 확장성과 관련된 엔티티, 모듈, 함수등에는 열려 ..

Programming/JAVA 2022.10.22

Spring Webflux - Reactive Streams API 만들기[0]

개요 안녕하세요 이번에 Spring Webflux를 이용한 API를 만들면서 배웠던 것들을 정리해보려고 합니다. 처음 프로젝트를 만들기부터 심상치않았던 만큼, Java 와 Spring webflux 를 이용해 어떻게 개발했는지 정리해보겠습니다. Spring Webflux - Reactive Streams란? 먼저 Reactive Streams 란게 무엇인지부터 찾아보겠습니다. Reactive Streams 의 공식문서에서 소개된 문장입니다. 논블로킹(non-blocking), 백 프레셔(back pressure)를 이용한 비동기(asynchronous) 데이터처리의 표준 기존의 처리방식은 데이터 처리요청을 받으면 모든 데이터를 처리한 후 메모리에 적재되어야만 응답메세지를 받았습니다. 하지만 Stream ..

Programming/Spring 2022.10.03

API 문서 만들기 - OpenAPI 3.0 적용하기

OpenAPI 란? OpenAPI Specification 3.0 ( OAS ) 라고도 하며 이전 2.0버전까지는 Swagger 라는 도구로 더 유명하다. 아직까지도 Swagger (스웨거) 3 라거나 하는 경우도 종종 있는거같다. OpenAPI 는 RESTFul API를 명세화하거나 문서화 하기 위한 도구로 개발되었으며, 최소한의 구현으로 한눈에 API에 필요한 내용을 파악하기 위해 만들어지고 사용되고 있다. 즉, API를 문서화하기 위한 도구 라고 이해하는 것이 맞다. 그렇다면 왜 이런 도구가 필요해진걸까? 조금만 생각해보자면 현업에서 다양한 사람들과, 여러 클라이언트들에게 내가 혹은 우리회사가 만든 api 를 제공하거나 개발해야하는 경우가 많다. 이때, 이 api를 한눈에 보여주고 필요한 사항을 요..

Programming/Spring 2022.08.31

JAVA - 숫자카드 (백준, 10815)

문제 문제의 요구사항은 결국 길이 (갯수)N 의 카드와 길이 (갯수)M 의 카드를 비교해 일치하는 index 는 1 아니면 0을 출력한다. 맨처음엔 이분탐색 문제인지도 모르고 그냥 단순히 완전탐색으로 찾으려고만 했다.. import java.util.*; public class main { public void card() { List aList = new ArrayList(); List bList = new ArrayList(); String result = ""; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); for(int i=0; i

알고리즘 공부 - 재귀함수 2편(하노이의 탑, 재귀 제거)

이번 포스팅에선 지난 재귀함수 1편에 이어서 공부해보겠습니다! 재귀함수를 제거하거나 비재귀적으로 표현하려면 어떻게 해야할까요? 꼬리 재귀의 제거 메서드의 꼬리에서 재귀 호출하는 메서드 recur(n-2)라는 말은 '인자로 n-2를 전달하여 recur 메서드를 호출한다.' 는 의미 입니다. 따라서 이 호출은 다음과 같이 바꿀 수 있습니다. n 의 값을 n - 2로 업데이트하고 메서드의 시작 지점으로 돌아갑니다. static void recur(int n) { while (n > 0) { recur(n - 1); System.out.println(n); n = n-2; } } 이렇게 하면 메서드의 끝에서 실행하는 꼬리 재귀(tail recursion) 는 쉽게 제거할 수 있습니다. 일반 재귀의 제거 그런데 ..

알고리즘 공부 - 재귀함수 1편

재귀함수란? 여기서 재귀(recursive)는 어떤 사건이 자기 자신을 포함한 채로 다시 자기 자신을 사용하여 정의될 때, 즉 자기 스스로를 재사용할 때 라고 편하게 줄일 수 있을 거 같습니다. 익숙한 현상을 이야기 해보자면 엘리베이터 속 거울안에 거울같은 느낌! 코드로 간단하게 구현해보겠습니다. class Factorial { // 재귀함수 factorial 구현해보기 static int factorial(int n) { if(n > 0) { return n * factorial(n - 1); } else { return 1; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextIn..

알고리즘 공부 - 스택과 큐 ( Stack & Queue )

https://goodthinking.tistory.com/53?category=965455 자료구조 - Stack 를 간단한 코드로 파악하기 개념 스택(Stack)이란? 데이터를 저장하기 위한 자료구조중 하나로 데이터를 일시적으로 저장하기 위해 고안된 개념이며, 가장 나중에 넣은 데이터를 가장 먼저 꺼내는 방식으로 진행됩니다. 데 goodthinking.tistory.com https://goodthinking.tistory.com/55?category=965455 자료구조 - 큐(queue), 간단한 코드로 파악하기 개념 큐(queue), 역시 스택과 비슷하게 데이터를 일시적으로 쌓아놓기 위한 자료구조입니다. 다만 차이점은 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 선입선출(FIFO, First In..

알고리즘 공부 - 검색부터 다시 해보자

개요 나는 현재 개발자로 솔루션회사에서 근무중인 주니어개발자이다. JAVA 언어가 베이스인 회사에서 자바와 스프링 프레임워크로 코딩하는 것은 당연하지만, 일을 할수록 공부하는 시간이 줄어들고 알고리즘등 혹시 나중에 코딩테스트가 필요할텐데 싶은 생각에 앞으로 꾸준히 문제를 풀어야겠다고 생각이 들어 문법은 건너뛰고 검색 알고리즘부터 재귀, 큐, 스택등으로 개념정리부터 해보려고 한다. 열심히 정리해보자! 선형검색(linear search) 간단하게 생각하자면 선형 = 일자로 쭉 늘어진 것 따위 일것이다. 그렇게 key 와 일치하는 값을 찾기위해 하나씩 검색하면서 진행하는 알고리즘으로 보통 for문이나 switch문으로 loop를 돌려서 index 를 증가시키며 찾는 것이다. 가장 단순한 알고리즘으로 구현하기도..