본문 바로가기
  • 개발하는 곰돌이

2023/0321

[Kotlin] 백준 1599 : 민식어 문제 링크 1599번: 민식어 무엇인가를 창조하는 것은 어렵다. 오민식은 지금까지 어려운 다른나라의 언어를 쓰면서 백성들이 고통에 받는 것을 슬퍼하고 새로운 언어를 만들고자 했다. 그는 창조의 고통에 시달리던 중에 www.acmicpc.net 문제 해설 주어진 문자열들을 민식어의 순서에 맞게 정렬해야한다. 주어진 민식어 단어들을 사전순으로 정렬하기 위해 아래와 같이 민식어 단어의 모든 알파벳을 대응하는 순서의 영어 알파벳으로 치환하는 메소드를 작성한다. 이 때, n과 g가 붙어있는 ng의 경우는 무조건 하나의 알파벳으로 생각한다는 조건이 있기 때문에 ng를 가장 먼저 치환한다. private fun String.toMinsik() = this.replace("ng", "L") .replace("a", ".. 2023. 3. 18.
[Spring] 유틸성 메소드를 작성할 때 Spring Bean과 정적 메소드를 모아놓은 클래스 중 무엇을 사용해야 할까? 목차 개요 프로젝트를 진행하다 보면 다양한 유틸성 메소드를 작성해서 사용하는 경우가 많다. 개인적으로는 이렇게 유틸성 메소드가 필요한 경우에는 Java라면 별도의 클래스에 유틸성 메소드를 static 메소드로 작성하고 Kotlin이라면 별도의 파일에 Top-Level 메소드로 작성해서 사용하고 있었다. 그러다가 단순히 계산만 하는 유틸성 메소드가 작성된 클래스를 스프링 빈으로 등록하여 사용하고 있는 코드를 보면서 스프링 빈으로 등록해도 싱글톤으로 동작하는데 이 방법도 틀린건 아니지 않나?라는 생각이 들어 구글링을 해봤는데 비슷한 생각을 했던 분들이 계셔서 한 번 정리해보려고 한다. 이하 유틸성 클래스라고 언급하는 것은 정적 메소드만을 모아놓은 별도의 클래스를 지칭한다. Spring Bean과 유틸성 클래.. 2023. 3. 15.
[Kotlin] 백준 12871 : 무한 문자열 문제 링크 12871번: 무한 문자열 첫째 줄에 s, 둘째 줄에 t가 주어진다. 두 문자열 s와 t의 길이는 50보다 작거나 같은 자연수이고, 알파벳 소문자로만 이루어져 있다. www.acmicpc.net 문제 해설 서로 다른 두 문자열을 각각 무한히 이어 붙였을 때 같은 문자열이 되는지 확인하려면 서로 같아질 때까지 계속 이어 붙여서 비교하는 방법이 있다. 문자열의 최대 길이가 50으로 매우 작기 때문에 이 방법으로 거뜬히 해결할 수 있다. s = "abab", t = "ababab"인 경우를 예로 들 수 있다. 이 경우의 풀이 과정은 다음과 같아진다. s의 길이가 t보다 작으므로 s를 한번 이어 붙인다. → s' = "abababab", t = "ababab" t의 길이가 s'보다 작으므로 t를 한번.. 2023. 3. 15.
[JPA] hibernate의 ddl-auto 속성의 종류와 주의해야할 점 목차 개요 JPA의 구현체 중 하나인 하이버네이트는 다양한 기능을 제공하는데 그 중 엔티티만 등록해놓으면 DDL(Data Definition Language)을 자동으로 작성하여 테이블을 생성하거나 수정해주는 ddl-auto라는 설정이 있다. JPA에 대해 아는 것이 거의 없던 처음에는 DDL을 자동으로 작성해주는 아주 편리한 기능이라고만 생각했는데, JPA를 배워가면서 마냥 편리한 기능이 아니라 잘못 다루면 돌이킬 수 없는 결과를 가져오는 아주 위험한(?) 기능이라는 것을 느끼게 되었다. 이 포스트에서는 JPA 하이버네이트에서 제공하는 ddl-auto의 종류와 기능, 그리고 주의 사항에 대해서 정리하려고 한다. ddl-auto 속성의 종류 ddl-auto에는 아래와 같이 5가지 종류의 속성이 있다. c.. 2023. 3. 14.
[Git] .gitignore에 등록하지 않고 특정 파일을 git 변경사항 추적에서 제외해보자 목차 필요성 git은 소프트웨어 형상 관리를 위해 별도로 .gitignore에 등록하여 git의 추적에서 제외한 파일이나 디렉토리가 아니라면 모든 변경사항을 추적하게 된다. 그리고 프로젝트를 수행하면서 기존에 커밋된 파일에 로컬에서만 사용할 코드나 DB에 접속하기 위한 설정 등을 남기고 싶은 경우가 있다. 이 경우 .gitignore에 등록하자니 협업을 하는 다른 개발자들도 영향을 받게 되고, 매번 커밋할 파일에서 수동으로 제외하자니 번거로울 뿐만 아니라 실수로 커밋하여 푸시까지 하게 되면 협업하는 모든 개발자들이 영향을 받게 된다. 이런 상황을 위해 git에서 로컬 상의 특정 파일만 변경사항 추적에서 제외하는 기능이 있다. 방법 적용 방법은 매우 간단하다. 명령 프롬프트, PowerShell, git .. 2023. 3. 12.
[Kotlin] 백준 1354 : 무한 수열 2 문제 링크 1354번: 무한 수열 2 첫째 줄에 5개의 정수 N, P, Q, X, Y가 주어진다. www.acmicpc.net 문제 해설 주어진 조건대로 재귀를 돌리면 된다. 다만 주어진 수의 범위가 굉장히 크기 때문에 피보나치 수를 재귀로 구할 때와 동일하게 별도의 Map에 이미 계산한 \(A_i\)를 저장하여 계산 횟수를 줄이는 것이 좋다. Code private val map = HashMap() private var p = 0L private var q = 0L private var x = 0L private var y = 0L fun main() = with(System.`in`.bufferedReader()) { val input = readLine().split(' ').map { it.to.. 2023. 3. 11.
[Kotlin] 백준 16499 : 동일한 단어 그룹화하기 문제 링크 16499번: 동일한 단어 그룹화하기 첫째 줄에 단어의 개수 N이 주어진다. (2 ≤ N ≤ 100) 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 소문자로만 이루어져 있고, 길이는 10을 넘지 않는다. www.acmicpc.net 문제 해설 그룹에 속한 단어는 모두 같은 알파벳으로 이루어져 있고, 개수도 같다는 것은 결국 해당 그룹에 속한 문자열들은 각각 정렬했을 때 같은 문자열이 된다는 뜻이다. 즉, 입력받은 문자열을 문자배열로 변경하여 정렬한 후, 다시 문자열로 변경하여 Set에 저장하면 그룹의 최소 개수를 구할 수 있다. 이후 Set의 크기를 출력하면 된다. Code fun main() = with(System.`in`.bufferedReader()) { va.. 2023. 3. 10.
[IntelliJ] 인텔리제이의 Remote host를 사용하여 서버에 접속해보자! 목차 서론 기존에 프로젝트를 진행하면서 Filezila를 사용하여 리눅스 서버의 파일을 관리하고, putty를 사용하여 리눅스 서버의 터미널에서 하는 작업을 진행했다. 그러다가 어느날 팀 동료가 작업하는 것을 봤는데 인텔리제이에서 리눅스 서버의 파일을 관리하고, 리눅스 서버의 터미널을 사용하는 것이었다! 인텔리제이가 굉장히 많은 기능을 제공한다고는 하지만 이렇게 원격으로 서버에 접속하는 기능까지 제공한다는 사실에 적잖은 충격을 받았다. 그리하여 관련 내용들을 찾아 보고, 인텔리제이로 원격 호스트에 접속하는 방법을 정리한다. 기본 환경 해당 내용은 IntelliJ IDEA Ultimate 2023.3.2 버전에서 진행하였으나 WebStorm, Pycharm, CLion 등의 JetBrains의 다른 IDE.. 2023. 3. 9.