JAVA
[LeetCode] Longest Repeating Character Replacement (Java)
✉️문제 https://leetcode.com/problems/longest-repeating-character-replacement/description/ 📝 접근 투 포인터 알고리즘을 기본적으로 이용한다. (left, right 포인터) right포인터를 오른쪽으로 이동시키면서 가장 빈번하게 나타난 알파벳의 개수를 기억한다. (right - left + 1 - maxFrequency)는 uppercase로 바꾼 횟수를 의미한다. 만약 right - left + 1 - maxFrequency > k 이면 left를 증가시킨다. left를 증가시킬 때 마다 maxFrequecy를 감소시킬 필요는 없다. 답은 가장 긴 길이를 구하는 것이며 maxF가 감소될 때 정답이 갱신될 수 없다. 🗝 문제풀이 clas..
[LeetCode] Pacific Atlantic Water Flow (Java)
✉️문제 https://leetcode.com/problems/pacific-atlantic-water-flow/ Pacific Atlantic Water Flow - LeetCode Can you solve this real interview question? Pacific Atlantic Water Flow - There is an m x n rectangular island that borders both the Pacific Ocean and Atlantic Ocean. The Pacific Ocean touches the island's left and top edges, and the Atlantic Ocean touches leetcode.com 🗝 문제풀이 class Solution { f..
[Java] 람다와 스트림
🔍 람다식 람다식이란 메서드를 하나의 식으로 표현한 것으로 메서드를 간략하면서도 명확한 식으로 표시할 수 있다는 장점이 있다. 🗝️ 람다식의 기본 형태 메서드에서 반환 타입과 이름을 제거하고 매개변수 선언부와 몸통 사이에 화살표를 추가하면 된다. 반환타입 메서드이름 (매개변수) {} =====> (매개변수) -> { } // Example int max(int a, int b) { return a (int a, int b) -> return a < b? b : a 🗝️ 함수형 인터페이스 자바에서 모든 메서드는 클래스 내에 포함되어야 한다. 즉, 클래스 없이는 함수를 사용할 수 없다는 뜻이다. 그럼에도 불구하고 람다식이 클래스 없이 실행될 수 있는 이유는 람다식은 실제로..
[Java] Volatile 키워드
🔍 멀티 코어 프로세서 멀티 코어 프로세서에는 코어마다 별도의 개시를 가지고 있기 때문에 멀티 쓰레드 프로그래밍의 결과가 제대로 동작하지 않을 수 있다. L1캐시와 L2캐시에 대해서 간단히 설명하면 다음과 같다. L1 캐시는 CPU 코어에 가장 가까운 위치에 있어 빠르게 접근할 수 있지만 용량이 작다. L2 캐시는 L1캐시보다 크며 속도는 느리다. 여러 코어간의 데이터 공유를 위한 캐시로 사용된다. 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업한다. 따라서 다시 값을 읽어올 때는 먼저 캐시에 있는지 확인하고 없을 때만 메모리에서 읽어온다. 멀티 코어 프로세스에서는 다음과 같이 코어마다 별도의 캐시를 가지고 있기 때문에 원하는 결과를 얻지 못할 수도 있다. 🔍 Volatile 키..
[Java] 쓰레드의 동기화
🔍 쓰레드의 동기화 멀티쓰레드 프로세스의 경우 같은 자원을 여러 쓰레드에서 공유하여 사용하기 때문에, 예상치 못한 결과를 얻을 수도 있다. 예를 들어 돈을 인출하는 과정을 두 개의 쓰레드 작업으로 생각해보자. 현재 3000원이 통장 잔고에 있고, 쓰레드 A는 3000원 인출을 요청한다. 이때, 쓰레드 B도 1000원을 인출 요청한다. 이 경우에 쓰레드 A가 deposit -= money 를 실행하기 전에 쓰레드 B가 deposit >= money 구문을 실행한다면 deposit이 마이너스가 될 것이다. public class BankAccount { private int deposit; public void withdraw(int money) { if(deposit >= money) { deposit -..