Java 27

정규식 알아보기

https://school.programmers.co.kr/learn/courses/30/lessons/72410 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위 문제를 풀면서 정규식으로 풀면 되겠다라는 건 생각할 수 있었지만, 정규식으로 표현할 수가 없어 검색을 하여 문제를 해결하였다. 이 참에 정규식에 대해서 자세히 알아보면 좋을 듯하여 글을 정리하여 보았다. 더보기 정규표현식은 다음과 같은 구성 요소로 이루어져 있습니다: 리터럴(Literal) 문자: 일반 문자들은 자신과 정확히 일치하는 문자를 찾습니다. 예를 들어, 'abc'라는 패턴은 'abc..

Java 2023.04.28

[알고리즘] 04/06 알고리즘 공부

종합 시험이 있어 건네 받은 문제 은행을 토대로 DP, Greedy, Divide and Conquer, Master 정리, P,NP,NP-complete,NP-Hard, 정지 문제에 대해 공부한 내용으로 정리하였다. DP(Dynamic Programming, 동적 계획법) - 큰 문제를 작은 문제로 나누어 푸는 최적화 기법 - 중복되는 부분 문제가 존재하고, 이를 한번만 계산하고 결과를 저장해둠으로써 중복 계산을 줄임 - Memoization(메모이제이션) 기법을 사용하여 이미 계산된 값을 저장해둠 - 예시: 피보나치 수열, 최장 증가 부분 수열(LIS) 등 Greedy Algorithm(탐욕 알고리즘) - 각 단계에서 지금까지의 선택이 전체적인 결과를 만족시키는 최적해가 되는 방식 - 각 선택마다 최..

Java 2023.04.07

[java] 프로그래머스 : 등굣길

https://school.programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 접근법 : n,m으로 DP 배열(n+1, m+1)을 만들고 웅덩이는 루트 계산에서 빼기 위해 0으로 처리해 경로 계산을 해준다. dp[i][j] += (dp[i-1][j]+dp[i][j-1]) 의 의미는 왼쪽에서 오는 경우와 위쪽에서 오는 경우를 합친 경우의 수이다 class Solution { public int solution(int m, int n, int[][] puddles) { i..

Java 2023.04.04

[java] 프로그래머스 : 정수 삼각형

https://school.programmers.co.kr/learn/courses/30/lessons/43105?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 접근법 : DP 메모이제이션 방법으로 위에서부터 아래로 가면서 좌,우의 큰 값과 해당 위치에 triangle[x][y]를 더해줘 가장 마지막 줄에 맥스값을 리턴해준다. package programmers; public class lesson_43105 { public static void main(String[] args) { lesson_43105.Solution ..

Java 2023.04.04

[java] 프로그래머스 : N으로 표현

https://school.programmers.co.kr/learn/courses/30/lessons/42895 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 접근법: 1부터 시작해 number까지 DP : tabulation 방식으로 풀려고 하였지만, number == N 일 때, 1번 인것을 제외하곤 규칙을 발견하지 못했다.... 아래 풀이는 https://small-stap.tistory.com/65 을 완전 참고하였다 같은 숫자 1번으로 나오는 값은 N이 1~9 이기 때문에 number 1~9 -> 1번이고 같은 숫자 2번으로 나타낼 수 있..

Java 2023.04.04

[java] Stream() 정리하기

자바 스트림(Stream)은 Java 8부터 도입된 기능으로, 컬렉션, 배열, I/O 채널 등의 데이터 소스를 처리할 수 있는 선언적 API를 제공합니다. 스트림은 데이터를 변환하거나 필터링하는 연산을 사용해 다양한 작업을 수행할 수 있습니다. 스트림은 중간 연산과 최종 연산으로 나뉩니다. 중간 연산은 여러 개의 스트림을 연결하고, 최종 연산은 스트림을 소모하여 결과를 생성합니다. 스트림 생성 연산 Stream: 일반적인 스트림으로, 어떤 타입의 객체든 처리할 수 있습니다. Stream의 인스턴스는 Stream.of(), Arrays.stream() 또는 Collection.stream() 등의 방법으로 생성할 수 있습니다. import java.util.ArrayList; import java.util..

Java 2023.04.02

[Java] For문 보다 Stream?

스트림은 컬렉션을 다루는 함수형 프로그래밍 패러다임을 제공합니다. 이를 통해 코드를 간결하고 가독성 좋게 작성할 수 있습니다. for문은 일반적으로 명령형 프로그래밍 패러다임에서 사용됩니다. for문을 사용하면 코드가 좀 더 복잡해지고, 가독성이 떨어질 수 있습니다. 반면에 스트림을 사용하면 데이터를 처리하는 코드와 로직을 분리시킬 수 있기 때문에 가독성이 높아집니다. 또한, 스트림은 병렬 처리를 쉽게 할 수 있습니다. 이는 대규모 데이터 처리에 유용합니다. 스트림은 내부적으로 데이터를 분할하여 처리하기 때문에 멀티코어 환경에서 병렬 처리가 쉽게 가능합니다. 반면에 for문은 멀티코어 환경에서 병렬 처리가 어렵습니다. 또한, 스트림을 사용하면 중간 연산과 최종 연산을 체이닝하여 작성할 수 있기 때문에 코..

Java 2023.04.01

[자료 구조] 그래프 : DFS, BFS

DFS와 BFS는 그래프 탐색 알고리즘으로, 그래프의 노드를 탐색하는 방법입니다. 시간 복잡도 인접 리스트 : O(V + E), 인접 행렬 : O(V^2) DFS(깊이 우선 탐색)는 그래프의 시작 노드에서부터 시작하여 한 분기(branch)씩 내려가면서 그래프를 탐색하는 방법입니다. 이때 각 분기마다 하나의 노드를 선택하여 방문하며, 더 이상 방문할 노드가 없을 때 이전 분기로 돌아가서 다른 노드를 방문합니다. 이러한 과정을 반복하여 그래프 전체를 탐색합니다. DFS는 스택(Stack) 자료구조를 이용하여 구현할 수 있습니다. BFS(너비 우선 탐색)는 그래프의 시작 노드에서부터 시작하여 인접한 모든 노드들을 먼저 탐색한 후에, 그 다음으로 인접한 노드들을 탐색하는 방법입니다. 이때 큐(Queue) 자료..

Java 2023.03.30

JUnit : IntelliJ , 단위 테스트

http://www.yes24.com/Product/Goods/31869154 자바 웹 프로그래밍 Next Step - YES24 이 책은 웹 개발 입문의 껍질(책에서는 ‘양파껍질’로 표현한다)을 막 벗겨낸 경력 1년 이상의 초보개발자들을 대상으로 하는 책이다. 웹 서버, 프레임워크 등을 직접 제작해보고 테스트와 리 www.yes24.com 본 글은 위 도서를 학습하면서 필요한 부분을 정리한 내용이다. JUnit을 활용해 단일 테스트를 하는 것이 콘솔로 확인, 시간이 지난 후에도 안정성 있게 확인할 수 있다고 한다. 도서에서는 이클립스로 설명하고 있어, IntelliJ로 활용하는 법을 찾아보고 정리해본다. JUnit은 자바 언어용 단위 테스트 프레임워크입니다. JUnit은 단위 테스트 작성을 위한 여러 ..

Java 2023.03.29

[Java] Collection Set 정리하기

Java에서는 다양한 데이터 구조를 지원하기 위해 Collection 인터페이스를 제공합니다. Collection 인터페이스는 List, Set, Queue 인터페이스를 상속받고 있습니다. Java에서 Set은 Collection 인터페이스를 구현한 것으로, 중복된 원소를 허용하지 않으며 순서가 없는 데이터 구조입니다. Java에서 Set은 HashSet, TreeSet, LinkedHashSet 등의 구현체가 있습니다. HashSet은 가장 기본적인 Set 구현체로, 해시 테이블을 이용하여 원소를 저장합니다. HashSet은 중복된 원소를 허용하지 않으며 순서가 보장되지 않습니다. TreeSet은 이진 검색 트리(binary search tree)를 이용하여 원소를 저장합니다. TreeSet은 원소를 ..

Java 2023.03.29