분류 전체보기(361)
-
[Baekjoon] 1463번: 1로 만들기
https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 설명 정수 X에 사용할 수 있는 연산은 다음 세 가지다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절이 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 구하시오. 풀이 방법 - DP DP 기본 문제로 유명한 문제이다. N = 6 이라고 가정해보자. 이 경우 호출되는 함수의 구조는 다음과 같을 것이다. f(3), f(2), f(1) 처럼 같은 연산이 계속 반복되는 것을 볼 수 있다...
2023.03.31 -
[Baekjoon] 1049번: 기타줄
https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 문제 설명 새로운 기타줄을 사기 위한 가능한 적은 돈을 구해야 한다. 끊어진 기타줄 개수 N개와 브랜드 M개가 주어지고, 각 브랜드에서 파는 기타줄 6개 묶음의 패키지와 낱개로 살 때 가격이 주어진다. 풀이 방법 단순한 그리디 문제이다. 먼저 오름차순 정렬을 하여 패키지에서 최솟값과 낱개의 최솟값을 구한다. 그 다음 패키지로만 샀을 때와 낱개로만 샀을 때의 가격을 비교하여 적은 값을 구한다. ..
2023.03.30 -
[Baekjoon] 2467번: 용액
https://www.acmicpc.net/problem/2467 2467번: 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 - www.acmicpc.net 문제 설명 사이트 설명은 길지만 핵심은 오름차순으로 입력되는 수 중 두 수의 합의 절댓값이 0과 가장 가까운 두 수를 찾는 것이다. 풀이 방법 - 투 포인터 어떻게 보면 완전탐색이지만 투 포인터를 활용하면 더 효율적으로 해결할 수 있다. 예제 입력 1로 시나리오를 생각해보자. 먼저 입력 자체가 오름차순이기 때문에 맨 왼쪽은 가장 작은 수이고 맨 오른쪽은 가장 큰 수이다. 따라서 맨 왼쪽이 양..
2023.03.29 -
[Kotlin] 11. object 키워드: 클래스 선언과 인스턴스 생성
Kotlin에서 object 키워드는 다양한 상황에서 사용하지만 모든 경우 클래스를 정의하면서 동시에 인스턴스를 생성한다는 공통점이 있다. object를 사용하는 여러 상황을 살펴보자. 객체 선언(object declaration) 싱글턴 객체를 정의하는 방법 중 하나이다. 동반 객체(companion object) 인스턴스 메서드는 아니지만 어떤 클래스와 관련 있는 메서드와 팩토리 메서드를 담을 때 쓰인다. 동반 객체 메서드에 접근할 때는 동반 객체가 포함된 클래스의 이름을 사용할 수 있다. Java의 정적 메서드 및 정적 필드를 대신한다. 객체 식 Java의 익명 내부 클래스 대신 쓰인다. 1. 객체 선언: 싱글턴을 쉽게 만들기 Java에서 싱글턴을 만들 때는 보통 모든 생성자를 private으로 만..
2023.03.28 -
[Java] 인증번호 생성 방법
1. 문제 프로젝트에서 이메일 인증을 통해 회원가입을 수행하도록 하는 요구사항이 발생했다. 이때 6자리 숫자를 입력하는 방법으로 인증을 하도록 했는데 이 방법에 대해서 찾아본 내용들을 정리한다. 2. 인증번호 생성 방법 자바에서 인증번호를 생성하는 방법은 여러 가지가 존재한다. Random ThreadLocalRandom SecureRandom 이 중에서 세 번째인 SecureRandom을 사용하도록 한다. 3. Random 탈락 이유 Java에서는 난수를 제공하는 방법으로 Random 패키지를 제공한다. 하지만 암호학적으로 안전하지 않다. 이는 공식 문서에 언급되어 있다. 💡 Instances of `java.util.Random` are not cryptographically secure. Consi..
2023.03.28 -
[Kotlin] 10. 컴파일러가 생성한 메서드: 데이터 클래스와 클래스 위임
Java에서는 클래스가 equals, hashcode, toString 등의 메서드를 구현한다. 그리고 보통 이런 메서드들은 기계적으로 구현된다. 일반적으로 IDE에서 이런 기능을 지원해줘서 직접 구현하는 일은 많이 없지만 코드가 지저분해지는 것은 어쩔 수 없다. Kotlin에서는 이러한 메서드들을 컴파일러가 내부적으로 구현해주기 때문에 소스코드를 깔끔하게 유지할 수 있다. 1. 모든 클래스가 정의해야 하는 메소드 1. toString() Java와 마찬가지로 Kotlin에서도 객체의 기본 toString()은 클래스이름@숫자 와 같은 형식을 띤다. 이는 별로 좋은 방식은 아니므로 객체의 필수 정보를 포함하여 toString()을 오버라이드해야 한다. 2. equals() Java에서는 두 값에 대한 비..
2023.03.28