분류 전체보기 42

[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

[Java] 03/28 알고리즘 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42748 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { public int[] solution(int[] array, int[][] commands) { int[] answer = new int[commands.length]; int idx = 0; for(int[] command : commands){ int[] com = new int[command[1]-command[0] + 1]..

Java 2023.03.29

[자료 구조] 트리 : 이진 트리

트리는 Node와 Edge로 구성된 자료 구조로 계층적인 구조를 나타낼 때 주로 사용된다. ex) 폴더 구조, 조직도, 가계도 하나의 노드에서 다른 노드로 이동하는 경로는 유일하며, 노드가 N개일 때 트리 전체의 엣지의 수는 N-1개이다. 또한 Cycle이 존재하지 않고,모든 노드는 서로 연결되어 있으며, 하나의 엣지를 끊으면 2개의 sub-tree가 되는 것이 특징이다. 이 중 이진 트리(Binary Tree)는 각 노드가 최대 두 개의 자식 노드를 가지는 특별한 형태의 트리이다. 이진 트리의 종류 - 포화 이진 트리(Perfect Binary Tree) : 모든 레벨에서 노드들이 꽉 채워져 있는 트리 - 완전 이진 트리(Complete Binary Tree) : 마지막 레벨을 제외하고 노드들이 모두 ..

Data Structure 2023.03.27

[알고리즘] 최소 신장 트리(Minimum Spanning Tree)

최소신장트리(Minimum Spanning Tree, MST)는 연결 그래프에서 모든 노드를 연결하는 트리(Tree)를 만들 때, 간선의 가중치 합이 최소가 되도록 하는 사이클이 존재하지 않는 트리를 말합니다. 이는 그래프 이론에서 매우 중요한 문제 중 하나이며, 실제로 최소신장트리 알고리즘은 다양한 분야에서 활용되고 있습니다. 대표적인 최소신장트리 알고리즘으로는 Kruskal 알고리즘과 Prim 알고리즘이 있습니다. Kruskal 알고리즘은 그리디 알고리즘(Greedy Algorithm)을 기반으로 하며, 간선의 가중치가 작은 순서대로 간선을 선택하여 트리를 만들어 나가는 방식입니다. 반면, Prim 알고리즘은 시작점에서부터 출발하여 연결된 노드들 중에서 가장 가중치가 작은 간선을 선택하여 트리를 만들..

Java 2023.03.25

[프로그래머스] 03/24 문제 풀기

프로그래머스 : 예산 https://school.programmers.co.kr/learn/courses/30/lessons/12982 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 접근법 : 최대한 많은 부서가 지원을 받아야 하므로, sort한 처음부터 하나씩 예산에서 빼주면서 cnt를 올린다. import java.util.Arrays; class Solution { public int solution(int[] d, int budget) { int answer = 0; Arrays.sort(d); for(int dot : d){ if(dot >..

Java 2023.03.24