분류 전체보기 61

[백준/Java] 9012 : 괄호

https://www.acmicpc.net/problem/9012 문자열을 끊어 받으면서 단순하게 '(' 가 들어오면 stack에 push해주고 ')' 가 들어오면 stack에 pop을 해주는데 stack이 비워져 있으면 'NO' 출력 후 반복문을 종료하면 된다. 반복문이 끝까지 돌았을 경우에는 stack의 사이즈를 가져와 0이면 'YES' 0이 아니면 '('가 ')' 보다 많은 경우 이기 때문에 'NO' 출력을 하면 된다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Stack;public class Baekjoon_9012_괄호 { public static..

알고리즘 2025.02.16

[백준/Java] 10828 : 스택

https://www.acmicpc.net/problem/10828 입력값 중에서 4개는 하나의 단어로 이루어져있으므로 해당되면 다음 i로 넘어가도록 continue를 해놓고, 남은 한 가지의 경우에는 두 단어 이루어져있으므로 StringTokenizer로 받아서 문제를 풀이하였다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Stack;import java.util.StringTokenizer;public class Baekjoon_10828_스택 { public static void main(String[] args) throws NumberFormatEx..

알고리즘 2025.02.16

ConcurrentHashMap

이 번에는 안전한 멀티 스레드 환경을 만들기 위해 Java에서 제공하는 ConcurrentHashMap에 대해 학습한 내용을 정리해보겠습니다.ConcurrentHashMapConcurrentHashMap은 Java에서 동시성 기능을 제공하는 Map 자료구조입니다. 먼저 간단하게 테스트를 진행한 후에 구현부에 대해서 정리해보겠습니다. 테스트 코드는 다음과 같습니다.import java.util.HashMap;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class concurrent { public stati..

LinkedHashMap

LinkedHashMap알고리즘을 공부하면서 HashMap에 대해서 학습하고 사용해 본 경험이 있습니다. 그런데 최근에 레퍼런스를 참고하는 과정에서 LinkedHashMap을 자주 보게되었습니다. 이번 기회에 LinkedHashMap에 대해서 학습한 내용을 정리해보겠습니다. LinkedHashMap에 대해서 정리하기 전에 간단하게 Map에 대해서 정리해보겠습니다. Map은 key, value 형태로 데이터를 저장하는 자료구조입니다. key를 기준으로 value를 저장하는 형태입니다. HashMap은 key를 Hash Method를 이용해 계산을 수행한 후, 그 결과값을 배열의 인덱스로 사용하여 저장하는 자료구조입니다. 그럼 LinkedHashMap은 어떤 자료구조일까요? 바로 순서라는 개념이 포함되어 있..

equals()

equals(), ==이 번에는 equals() 동작에 대해 공부한 내용을 정리해보겠습니다. equals()하면 == 과의 비교가 대표적으로 떠오릅니다. equals()는 값에 대한 비교를 하며 == 은 참조하는 주소를 비교합니다. 그럼 equals()는 실제로 값 비교를 어떻게 하는 지에 대하여 학습한 내용을 정리하겠습니다.equals()실제 equals()가 작동하는 코드를 보면서 하나하나 파헤져 보겠습니다.public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String aString = (String)anObject; if (coder() ==..

System.out.print

알고리즘 문제를 풀이하면서 시간초과가 발생하는 경우가 있습니다. 그런 경우에는 풀이를 위한 알고리즘 선택이 잘못된 경우도 있지만 출력에서 시간이 오래걸리는 경우도 있습니다. 예시로 백준 1406번 에디터를 풀면서 생겼던 문제점과 이를 해결하는 과정을 기록해보겠습니다. 이 문제에서 시간초과가 발생하는 이유는 최대 출력이 100,000 글자인데 이를 하나 하나 출력을 하다보니 최대 100,000번 출력을 해야하므로 시간초과가 발생하였습니다.System.out.print 성능System.out.print가 느린이유는 무엇인지 궁금하여 학습을 해보았습니다. System 클래스의 구조는 다음과 같습니다. 이 외에도 많은 코드가 있지만 오늘 주제에 맞는 코드만 가져왔습니다. 간단히 살펴보면 System 클래스에 o..

동기&비동기, 블로킹&논블로킹

동기&비동기호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라, 함수 실행/리턴 순차적인 흐름을 따르느냐, 안따르느냐가 관심사입니다. 예시는 실생활 청소로 비유해서 설명을 해보겠습니다.동기(Sync)호출하는 함수 A가 호출되는 함수 B의 작업 완료 후 리턴을 기다리거나, 바로 리턴 받더라도 미완료 상태이라면 작업 완료 여부를 스스로 계속 확인합니다. 예시)1. 세탁기를 돌린다.2. 세탁기가 시작했다는 알림을 준다.3. 세탁기가 작업이 완료될 때 까지 앞에서 기다린다.4. 세탁기가 작업이 완료됬다는 알림을 주며 완료된 것을 확인한다.5. 로봇청소기를 돌린다.6. 로봇청소기가 시작했다는 알림을 준다.7. 로봇청소기가 작업이 완료될 때 까지 앞에서 기다린다.8. 로봇청소기가 완료됬다는 알림을 주며 완료된 것을 ..

Garbage Collection(GC)

가비지 컬렉션가비지 컬렉션은 불필요한 메모리를 정리를 해주는 프로세스로만 단순히 알고 있었습니다. 이번에는 가비지 컬렉션에 대해 더 자세히 알아보고 정리를 해보겠습니다.가비지 컬렉션의 대상객체들은 실질적으로 Heap영역에서 생성되고 Method Area이나 Stack Area 에서는 Heap Area에 생성된 객체의 주소만 참조하는 형식으로 구성됩니다. Heap에 있는 객체에 참조가 있으면 Reachable 참조가 없으면 Unreachable로 구분을 하고 가비지 컬렉션은 Unreachable된 객체를 정리합니다.Reachable : 객체가 참조되고 있는 상태Unreachable : 객체가 참조되고 있지 않은 상태 (GC의 대상이 됩니다.)Mark and Sweep 알고리즘Mark가비지 컬렉션에는 GC ..

Comparable, Comparator

등장 배경primitive type은 Java에서 변수를 비교할 수 있는 기능을 제공해 주지만 새로운 클래스 객체를 만들어 비교하고자 할 때 객체는 사용자가 기준을 정해주지 않는 이상 어떤 객체가 더 높은 우선순위를 갖는지 판단 할 수가 없습니다. 이를 해결하기 위한 인터페이스가 Comparable과 Comparator입니다.//primitive type 비교public static void main(String[] args) { int a = 1; int b = 2; if(a > b) { System.out.println("a가 b보다 큽니다."); } else if(a == b) { System.out.println("a와 b는 같습니다."); } else { System.out.print..