전체 글 367

[Kotlin] 이펙티브 코틀린

Item 6. 사용자 정의 오류보다 표준 오류를 선호하라- 요청자에게 특정 응답 코드와 메시지로 응답하는 데에는 예외- 불필요한 커스텀을 지양 Item 7. 결과가 없을 가능성이 있는 경우 널 가능 또는 Result 반환함수가 원하는 결과를 생성하지 못할 때, 처리하는 2가지 주요 방안이 있다. 방안1) null 또는 Result.failture를 반환하여 실패를 나타내기- 예상되는 오류를 표현하는 데 적합- 실패 시 추가 정보를 전달해야 할 때, Result(성공/실패) 사용, 아니라면 null을 사용- 널 가능 값은 사용하기 전에 언래핑(nullable -> non-null로 만드는 과정) 해야한다. 방안2) 예외 던지기- 비정상적인 상황, 오류가 예상되지 않는 상황에서는 예외를 던져야 한다. 빈 ..

Programming/Kotlin 2026.03.31

[Kotlin] 코루틴 (+Virtual Thread)

코루틴이란?co-routine = 협력하는 + 함수‘실행의 지연과 재개를 허용함으로써, 비선점적 멀티태스킹을 위한 서브 루틴을 일반화한 컴퓨터 프로그램 구성요소’코루틴은 병행성은 제공하지만, 병렬성은 제공하지 않는다. (= 물리적이 아닌, 논리적으로 작업이 동시에 실행되는 것처럼 보이는 것)비선점적 멀티태스킹이란?비선점형: 하나의 프로세스가 CPU를 할당받으면 종료되기 전까지 다른 프로세스가 CPU를 강제로 차지할 수 없음(코루틴은 명시적으로 양보해야 전환됨)선점형: 하나의 프로세스가 다른 프로세스 대신에 CPU를 강제로 차지할 수 있음(thread는 스케쥴링 기준에 따라 CPU를 사용하도록 되어있음, 즉 애플리케이션 코드가 아닌 다른 요소에 의해 강제로 변경됨)코루틴 사용fun main(): Unit ..

Programming/Kotlin 2026.03.28

Kotlin의 기초

코틀린이란?코틀린의 설계 목적- "간결성"보다는 "가독성"을 높이는 데 목표를 두고 설계된 프로그래밍 언어- 코틀린에 숙련된 개발자만을 위한 코드는 좋은 코드가 아니며, 수정 및 디버깅도 쉬워야 함코틀린의 컴파일러*.kt -> Kotlin compiler -> *.class -> *.jar -> Application(with Kotlin runtime) - JVM에서 실행될 수 있는 바이트 코드가 포함된 클래스 파일을 생성한다.- 코틀린 컴파일러에 의해 컴파일되기 때문에, 자바를 사용할 때와 다른 부분이 존재한다. ex) 자바에서는 체크/언체크 예외를 구분하나, 코틀린에서는 모든 예외를 언체크 예외로 인식한다. 코틀린 기초 문법1. 변수 선언val : 불변 변수var: 가변 변수변경 가능성보다 불변성..

Programming/Kotlin 2026.03.28

Mac OS jdk21 설치

맥북은 JDK를 위한 폴더가 이미 설정되어있어, 파일을 다운받아 압축풀고 해당 폴더로 jdk폴더를 이동시키면 끝난다. 우선, OpenJDK설치 공식 사이트으로 들어가서 tar.gz파일을 다운받는다. 이때, CPU아키텍처를 확인하여 arm64이면 Mac/AArch64를 다운받는다. 확인하는 방법은 터미널 창에 'uname -a'를 치면, arm64라는 키워드가 보인다. 다운로드 파일에서 압축파일을 더블 클릭하여 압축을 해제하여 jdk폴더를 얻을 수 있다. 이 폴더를 ~/library/Java/JavaVirtualmachines 경로에 들어가서 넣는다. 만일 해당 경로가 없다면 폴더를 만들어서 넣어주면 끝난다. 맥에서는 기본적으로 Java를 위한 path가 설정되어있기 때문에, 터미널에서 java -vers..

개발환경설정 2024.04.10

[Java] 프로그래머스 : 순위 검색

1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/72412 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이 과정 처음엔 시간 계산안하고 풀어서 효율성에서 딱걸렸다. (info의 크기) x (query의 크기)는 50억으로 2중 반복문 도는 순간 무조건 효율성에서 걸린다. 따라서 메모리를 좀 더 쓰더라도 (info의 크기) + (query의 크기)가 되도록 해야한다. 구체적인 프로세스는 아래와 같다. 1) info를 돌면서, 모든 가능한 경우를 Key값으로, 점수를 Value로 한다..

[Java] 프로그래머스 : 거리두기 확인하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/81302 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 위쪽 방향은 이미 다 탐색했으므로 또 확인할 필요 없이 3방향 탐색하면서, (거리가 2 초과)거나 (범위)를 벗어나거나 (파티션이 있을 경우) 더이상 탐색을 하지 않고 종료한다. 이때, 거리가 2이하인데, 'P'가 있는 경우 답은 0으로 체크하고 더 이상 탐색하지 않는다. +) 처음엔 DFS를 떠올렸는데, 구체적인 해결 방안을 생각해내는 데 시간이 걸렸다.. 알고리즘은 꾸준히 푸는..

[Java] 백준 22866번 : 탑 보기

문제 https://www.acmicpc.net/problem/22866 22866번: 탑 보기 3번째 건물에서 볼 수 있는 건물은 2, 4, 8번째 건물로 총 3개를 볼 수 있다. 그 중 3번째 건물과 가장 가까운 건물은 2, 4번째 있는 건물로 이 중 번호가 작은 번호인 2가 답이 된다. www.acmicpc.net 풀이과정 stack을 활용하여 왼->오, 오->왼으로 각각 순회하면서 자신의 왼쪽 혹은 오른쪽으로 옆면을 볼 수 있는 건물을 찾는다.stack에는 데이터가 내림차순으로 남게 하여, 자신보다 큰 건물의 수는 stack의 크기와 동일하게 하면 된다.따라서, 자신보다 작은 값은 모두 pop시키고, 남은 stack크기를 자신이 볼 수 있는 건물 수에 더해주면 된다. 이때, stack의 top에 ..

[Java] 백준 20291번 : 파일

문제 https://www.acmicpc.net/problem/20291 20291번: 파일 정리 친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를 www.acmicpc.net 풀이 과정 TreeMap은 내부적으로 레드-블랙 트리 구조를 갖추고 있어, 정렬한 자료가 필요할 때 유용하다. 따로 key를 복사해서 정렬하지 않고, 값을 넣으면서 Entry자체를 정렬하는 것이다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Map; import java.util.TreeMap; ..

[Java] 백준 10800번 : 컬러볼*

문제 https://www.acmicpc.net/problem/10800 10800번: 컬러볼 첫 줄에는 공의 개수를 나타내는 자연수 N이 주어진다(1 ≤ N ≤ 200,000). 다음 N개의 줄 중 i번째 줄에는 i번째 공의 색을 나타내는 자연수 Ci와 그 크기를 나타내는 자연수 Si가 주어진다(1 ≤ Ci ≤ N www.acmicpc.net 풀이과정 풀이 방법이 2가지가 있는데, 우선 구현하는 로직은 같고 정렬할 때 사용하는 방법만 다르다. [방법1]에서는 공의 정보를 모두 받은 후, Arrays.sort를 통해 O(nlogn)이 걸리는 정렬을 수행했고, [방법2]에서는 크기 별로 ArrayList를 만들어서 크기 별로 공을 모아서 사용했다. 공의 최대 가능한 개수에 비해, 크기의 종류가 훨씬 적었기..

[Java] 프로그래머스 : 가장 큰 수

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42746?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 처음 생각했던 방법은 숫자들의 자리 수를 다 맞추는 것을 생각했는데, 3442, 33 일 때는 3442 > 3300으로 제대로 적용되나 3223, 32일 때는 3223 > 3200이지만 322332보다 323223이 더 크게 되어 원하는 결과를 도출할 수 없었다. 그래서 다른 사람의 코드를 대략적으로 보고난 후, 좀 더 직관적으로 생각해서, 두 숫자 중 어..