전체 글 645

[PS] 프로그래머스 광물캐기 ( Greedy ) with JAVA

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ◎ 문제풀이 어려운 알고리즘이 필요한 문제는 아니었지만 적절한 풀이 발상이 쉽지 않은 문제였다. 곡갱이는 종류에 상관없이 광물을 5개까지만 캘 수 있고 한번 캐기 시작하면 교체할 수 없다. 곡갱이의 종류에 따라 피로도가 달라지므로 최소 피로도를 구하려면, 가장 성능 좋은 곡갱이(다이아)로 가장 피로도가 높은 광물집합( 광물 5개 이하로 구성된 )을 캐야 한다. 1) 곡갱이를 다이아-철-흙 순으로 곡갱이 큐에 넣는다. ( 성능순 ) 2) 나열된 광물을 앞에서부터 5개씩 끊어 광물집합 객체를 생성하고 우선순위 큐..

문제풀이/Greedy 2024.04.12

[PS] 프로그래머스 - 삼총사 ( 백트래킹 ) with JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/131705 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ◎ 문제풀이 N명의 학생 중에 3명의 조합을 찾는 문제이다. 조합의 모든 경우의 수를 완전탐색하는 알고리즘에는 백트래킹(BackTracking)이 있다. DFS와는 다르다. DFS는 모든 '노드'를 방문하는 완전탐색 시, 사용되는 알고리즘이다. 백트래킹은 모든 '조합'을 완전 탐색하는 경우 사용되는 알고리즘이다. 그럼 백트래킹을 사용하여 N명의 학생 중 3명의 조함(삼총사)를 찾는 코드를 구현해..

[프로젝트] 로그인 및 회원가입 기능 구현 Day1

◎ 일시 : 2024.04.09(화) ◎ 내용 : 1) 스프링 시큐리티를 활용한 로그인 JWT 인증방식 아키텍처 구현 spring security 5.7 버전 이전에는 WebSecurityConfigurerAdapter를 설정클래스인 WebSecurity를 상속하고 configure 메소드를 재정의 하는 방식으로 필터체인을 설정했다. spring security 5.7 버전 이후부터는 FilterChain을 Bean으로 생성하는 방식을 권장하고 있다고 한다. 개인적으로 설정클래스는 @Bean 어노테이션으로 Bean객체를 생성하는 책임이 있는데, WebSecurityConfigurerAdapter를 상속하고 메소드를 재정의하는 책임까지 혼재되어 있었다고 생각하고 있었다. 이제는 WebSecurity 설정클..

[PS] 프로그래머스 햄버거만들기 ( 자료구조 ) with JAVA

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ◎ 문제풀이 재료들이 배열에 차례대로 저장되어 있다. 햄버거를 만드는 패턴과 일치하는 케이스를 카운트 하면 된다. 배열에 저장되어 있는 재료들을 가장 왼쪽부터 차례대로 자료구조에 담으면서, 빵-야채-고기-빵 차례로 데이터가 나열되는지를 체크하면 된다. 자료구조는 리스트를 사용하였고 리스트에서 만들어진 햄버거 재료를 제거할 때, size가 가변적으로 변하니 인덱스 사용에 주의해야 한다. ◎ 코드 import java.util.*; class Solution { public int solution(int[] in..

[PS] 프로그래머스 - 과제 진행하기 ( 구현, 자료구조 ) with JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/176962 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ◎ 문제풀이 문제의 요구사항을 요약하면 다음과 같다. 1) 우선순위는 새로 시작한 과제가 높다. 2) 기존 진행중이던 과제는 우선순위가 낮다. 3) 멈추어둔 과제가 여러개이면 최근에 멈춘 순으로 시작 4) 과제를 끝낸순서로 이름을 배열에 담아 return 요구사항을 다음과 같은 알고리즘으로 구현하면 된다. 1) 우선순위큐를 사용하여 과제를 시간을 기준으로 오름차순 정렬한다. 2) 첫 시간부터 1..

[PS] 프로그래머스-요격시스템 (Greedy) with JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/181188 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ◎ 문제풀이 폭격미사일은 X 좌표 범위(start,end)를 가지고 요격미사일은 특정 x좌표에서 발사될 때, 최소한의 요격미사일 발사로 폭격미사일을 요격해야하는 문제이다. 주어진 폭격미사일 범위를 end좌표로 오름차순 정렬하는 것이 중요하다. 요격미사일은 폭격미사일이 끝(end)나는 지점에서 최소한 한 개가 발사되어야 하기 때문이다. 그러므로 폭격미사일 배열을 end를 기준으로 오름차순 정렬해야..

문제풀이/Greedy 2024.04.08

[ModernJAVA] Stream이 필요한 이유

컬렉션(Collection)은 데이터를 그룹화시켜 처리할 수 있도록 도와주는 자료구조이다. JAVA는 자료구조에 저장된 데이터를 조작할 수 있도록 Collection 인터페이스를 제공한다. 그러나 문제가 있다. 멀티코어 환경이 대중화 되면서 병렬 프로세스가 중요해졌다. 컬렉션에 저장된 데이터를 여러 스레드에 분산처리하면 높은 성능을 낼 수 있기 때문이다. 그러나 그 과정을 코드로 구현하기란 여간 복잡한 것이 아니다. JAVA는 명령형 프로그래밍이기에, 과정을 하나하나 코드로 구현해야만 한다. 음식 컬렉션을 세 가지 과정을 거쳐 조작해보자. 1) 400 칼로리 이하인 음식으로 필터링 한다. 2) 칼로리가 낮은 순으로 정렬한다. 3) 음식의 이름만 추출한다. 세 가지 과정을 명령형 프로그래밍으로 개발하면 아..

JAVA/Modern JAVA 2024.03.05

[K8S] Kubernetes 동작원리

Docker는 컨테이너 기술의 혁명을 가져왔다. [Docker] 컨테이너란 무엇일까? Docker 아이콘은 고래 하나가 여러 개의 컨테이너를 싣고 있는 모습이다. 여기서, 고래는 '컴퓨터'이고 컨테이너는 '격리된 프로세스'이다. 도커가 혁명적인 이유는 컨테이너라는 환경분리를 리눅 lordofkangs.tistory.com 리눅스 기술( cgroups, namespace)을 활용하여 리소스를 독립적으로 격리하고 할당이 가능해지자, 컨테이너(Container)라는 개념이 등장하였다. 하나의 컴퓨터 안의 여러 개의 컨테이너가 만들어졌고 모두 독립적으로 활동하였다. 이렇게 되자, 수많은 컨테이너를 관리하는 기술이 필요해졌는데, 그것이 바로 쿠버네티스(Kubernetes)이다. 쿠버네티스는 여러 대의 컴퓨터(노드..

DevOps/K8S 2024.02.25

[Docker] 컨테이너란 무엇일까?

Docker 아이콘은 고래 하나가 여러 개의 컨테이너를 싣고 있는 모습이다. 여기서, 고래는 '컴퓨터'이고 컨테이너는 '격리된 프로세스'이다. 도커가 혁명적인 이유는 컨테이너라는 환경분리를 리눅스 기술로만 이루어 냈다는 점이다. 도커가 존재하기 전에는 VM ( VirtualMachine ) 기술을 활용하였다. VM은 Hypervisor를 활용하여, 물리적으로 한 대의 OS 위에 가상의 Guest OS 여러 대를 실행 및 관리하는 구조이다. 무거운 커널이 여러 대가 동작하니, 그 위에서 동작하는 APP의 성능은 당연히 떨어질 수 밖에 없다. 도커는 커널의 존재를 하나로 줄였다. 커널이 하나만 존재할 수 있는 이유는 namespace와 cgroups를 활용하여 리소스를 독립적으로 분리하였기 때문이다. nam..

DevOps/DOCKER 2024.02.24

[JAVA] String, StringBuffer, StringBuilder의 차이

String, StringBuffer, StringBuilder의 차이를 정리하면 아래와 같다. String은 불변객체이고 StringBuffer, StringBuilder는 가변객체이다. StringBuffer는 멀티스레드 환경에서 사용되고 StringBuilder는 싱글스레드 환경에서 사용된다. 왜 이런 차이를 보이는 것일까? String이 불변객체인 이유 String이 불변객체인 이유는 JAVA가 문자열 리터럴을 String Constant Pool로 관리하기 때문이다. "안녕하세요", "반갑습니다.", "hello" 처럼 선언된 문자열은 문자열 리터럴로 간주되어 Heap 메모리 안에 생성된 String Constant Pool에 문자열 객체로 등록된다. 스레드A가 "안녕하세요" 문자열 객체를 리터..

JAVA/JAVA Basic 2024.02.23