전체 글399 [백준/BOJ] 2442번: 별 찍기 - 5 https://www.acmicpc.net/problem/2442 2442번: 별 찍기 - 5 첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다. www.acmicpc.net 문제 첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다. 입력 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. 예제 입력1 5 예제 출력1 * *** ***** ******* ********* 해설 예제 출력을 보자. 행 = i, 열 = j, 입력 = n이라 하자. 0행에서는 4열에만 *이 있고, 1행.. PS(Problem Solving)/BOJ 2021. 11. 17. [백준/BOJ] 2441번: 별 찍기 - 4 https://www.acmicpc.net/problem/2441 2441번: 별 찍기 - 4 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. www.acmicpc.net 문제 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. 해설 예제 출력을 봐보자. 행을 i라 하고, 열을 j라 할 때 j = i일 때 *이 출력되는 것을 알 수 있다. 소스 코드.. PS(Problem Solving)/BOJ 2021. 11. 16. [백준/BOJ] 2440번: 별 찍기 - 3 https://www.acmicpc.net/problem/2440 2440번: 별 찍기 - 3 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제 www.acmicpc.net 문제 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제 입력 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. 해설 우선 규칙을 찾아보도록 하자. 5를 입력했을 때 0행에는 5개, 1행에는 4개, 2행에는 3개 . . . 4행에는 1개의 별이 찍혀있다. 따라서 n-i(행)-1보다 j(열)의 값이 작거나 같을 때만 별을 찍으면 된다. ex) n = 5 0행 -> 5 - 0 - 1 = 4 ->.. PS(Problem Solving)/BOJ 2021. 11. 16. [백준/BOJ] 2355번: 시그마 https://www.acmicpc.net/problem/2355 2355번: 시그마 첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647) www.acmicpc.net 문제 두 정수 A와 B가 주어졌을 때, 두 정수 사이에 있는 수의 합을 구하는 프로그램을 작성하시오. 사이에 있는 수들은 A와 B도 포함한다. 입력 첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647) 출력 첫째 줄에 답을 출력한다. (-2,147,483,648 ≤ 답 ≤ 2,147,483,647) 해설 처음 문제를 봤을 때는 반복문을 통해 A부터 B까지의 수를 다 더하면 되겠구나 하고 시도를 해보았다. 이 시도는 시간 초.. PS(Problem Solving)/BOJ 2021. 11. 15. 코틀린(Kotlin) - 고차 함수 안에서 흐름 제어 람다 안의 return문: 람다를 둘러싼 함수로부터 반환 data class Person(val name: String, val age: Int) val people = listOf(Person("Alice", 29), Person("Bob", 31)) fun lookForAlice(people: List) { for(person in people) if(person.name = "Alice") { println("Found!") return } } println("Alice is not found") } >>> lookForAlie(people) Found! for문을 forEach 함수로 바꾸어도 루프의 기능은 동일하다. forEach에 넘긴 람다 안에 있는 return도 같은 의미이기 때문이다. f.. Programming/Kotlin 2021. 11. 14. 코틀린(Kotlin) - 인라인 함수 람다를 활용한 코드에선 무명 클래스 생성에 따른 부가 비용이 든다. 이 때문에 같은 작업을 수행하는 일반 함수를 사용한 구현보다 효율적이지 못하다. inline 변경자를 어떠한 함수에 붙이면 컴파일러는 그 함수를 호출하는 모든 문장을 함수 본문에 해당하는 바이트코드로 바꿔 일반 명령문과 같은 효율적인 코드를 생성하게 해 준다. 인라이닝이 작동하는 방식 위에서도 말했듯이 어떤 함수를 inline 선언하면 그 함수의 본문이 인라인 된다. 다른 말로 "함수를 호출하는 코드를 함수를 호출하는 바이트코드 대신 함수 본문을 번역한 바이트 코드로 컴파일하는 것이다." inline fun synchronized(lock: Lock, action: () -> T): T { lock.lock() try { return a.. Programming/Kotlin 2021. 11. 12. [백준/BOJ] 2439번: 별 찍기 - 2 https://www.acmicpc.net/problem/2439 2439번: 별 찍기 - 2 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. www.acmicpc.net 문제 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. 해설 우선 1부터 n행까지의 출력을 위해 반목문을 만든다. 이제 각 행에 별이 찍히는 위치를 보도록 하자. 시작점을 0으로 보면 1행에는 n-1번째 자리에 별이 찍혔고, 2행은 n-2, n-1번째 잘이 별이 찍혀있고, 3행은 n-3, n-2, n-1에 찍혀있다. 여기까지 봤으면 규칙을 눈치.. PS(Problem Solving)/BOJ 2021. 11. 10. [백준/BOJ] 2061번: 좋은 암호 https://www.acmicpc.net/problem/2061 2061번: 좋은 암호 암호화 방식 중에는 소수를 이용하는 것들이 많다. 보통은 매우 큰 두 개의 소수를 선택하고, 두 소수를 곱한 값을 암호화에서의 키로 사용하고는 한다. 이러한 방법이 좋은 이유는 일반적으로 www.acmicpc.net 문제 암호화 방식 중에는 소수를 이용하는 것들이 많다. 보통은 매우 큰 두 개의 소수를 선택하고, 두 소수를 곱한 값을 암호화에서의 키로 사용하고는 한다. 이러한 방법이 좋은 이유는 일반적으로 매우 큰 수를 소인수분해하는 것이 어렵기 때문이다. 소수를 택할 때 큰 수를 택하면, 이 둘을 곱해서 얻어지는 키 값도 커지게 된다. 하지만 그 반대는 성립하지 않을 수도 있다. 즉, 키 값이 매우 큰 경우에도 이.. PS(Problem Solving)/BOJ 2021. 11. 9. [백준/BOJ] 16428번: A/B - 3 https://www.acmicpc.net/problem/16428 16428번: A/B - 3 첫째 줄에 A와 B가 주어진다. (-1010000 ≤ A, B ≤ 1010000, B ≠ 0) www.acmicpc.net 문제 두 정수 A와 B를 입력받은 다음, A/B의 몫과 나머지를 출력하는 프로그램을 작성하시오. 어떤 정수 q와 r에 대해 A = qB + r (0 ≤ r < |B|)로 나타낼 수 있을 때, q를 몫, r을 나머지라고 한다. 해설 처음에 시도했을 때는 그저 BigInteger를 사용하여 두 값의 몫과 나머지를 구하면 될 줄 알았다. 하지만 이렇게 시도했을 때 모든 서브태스크를 만족시키지 못해 만점을 받을 수 없었다. 이유를 찾아보니 음수가 있으면 나눗셈을 하는데 몫과 나머지가 다르게 나오.. PS(Problem Solving)/BOJ 2021. 11. 9. [백준/BOJ] 2438번: 별 찍기 - 1 https://www.acmicpc.net/problem/2438 2438번: 별 찍기 - 1 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 www.acmicpc.net 문제 해설 n을 입력하여 1번째 줄엔 1개 2번째 줄엔 2개 n번째 줄엔 n개의 별을 찍는 문제이다. 이중 for문을 사용하면 쉽게 풀 수 있다. 우선 0부터 n-1까지 반복문을 만든다. 이 안에 0부터 i까지의 루프를 가진 반복문을 또 만들어 별을 찍게 하고 줄바꿈을 해주면 된다. 소스 코드 fun main(){ val n = readLine()!!.toInt() for(i in 0 until n){ for(j in 0 .. i){ print("*") } println() } } PS(Problem Solving)/BOJ 2021. 11. 8. [백준/BOJ] 1009번: 분산처리 https://www.acmicpc.net/problem/1009 1009번: 분산처리 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000) www.acmicpc.net 문제 해설 ab개의 데이터가 있고 10개의 컴퓨터가 있다고 한다. 11번째 데이터는 1번 12번 데이터는 2번 순으로 처리를 한다. 따라서 ab을 10으로 나누면 원하는 값이 나올 것이다. 하지만 무작정 제곱을 하다보면 자료형의 범위를 초과하는 경우가 생겨 성공 처리가 되지 않는다. 이를 해결하기 위해 temp라는 변수를 설정하여 1의 값을 저장하고, 제곱의 수만큼 반복문을 돌리며 temp * a % 10을.. PS(Problem Solving)/BOJ 2021. 11. 8. 코틀린(Kotlin) - 고차 함수 정의 고차 함수 정의 고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수이다. 코틀린은 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있으므로 고차 함수는 람다나 함수 참조를 인자로 넘길 수 있거나 함수 참조를 반환하는 함수인 것이다. ex) filter 함수는 술어 함수를 인자로 받으므로 고차 함수이다. list.filter(x > 0) 함수 타입 // 타입 추론 val sum = {x: Int, y: Int -> x + y} val action = { println(42) } // 함수 타입 선언 val sum: (Int, Int) -> Int = {x, y -> x + y} val action: () -> Unit = { println(42) } 함수 타입을 선언할 때는 반환 타입을 반드시.. Programming/Kotlin 2021. 11. 6. [백준/BOJ] 1712번: 손익분기점 https://www.acmicpc.net/problem/1712 1712번: 손익분기점 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 www.acmicpc.net 문제 해설 이 문제의 답은 총 판매 비용이 고정 비용 + 가변 비용보다 커지기 위해선 최소 몇 개를 팔아야 하는가이다. 고정 비용을 staticCost, 가변 비용을 productionCost, 노트북의 가격을 notebookPrice라고 하고, 판매 개수를 n이라 할 때 notebookPrice * n > staticCost + productionCost * n이 되는 n값을 구하는 것이다. 이를 반.. PS(Problem Solving)/BOJ 2021. 11. 5. [백준/BOJ] 1271번: 엄청난 부자2 https://www.acmicpc.net/problem/1271 1271번: 엄청난 부자2 첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 101000, m과 n은 10진수 정수) www.acmicpc.net 문제 해설 문제만 보면 최백준 조교가 가지고 있는 돈을 생명체의 수로 나누면 된다. 하지만 입력에서의 범위를 보면 최대 범위가 101000이다. 따라서 입력받는 자료형을 int와 long으로 하면 제출 결과 "틀렸습니다."를 받을 것이다. 자바와 코틀린에는 BigInteger가 있으므로 이를 사용하여 코드를 작성하면 간단히 답을 구할 수 있다. 소스 코드 import java.math.BigInteger fun main() { val i.. PS(Problem Solving)/BOJ 2021. 11. 5. [백준/BOJ] 10757번: 큰 수 A+B https://www.acmicpc.net/problem/10757 10757번: 큰 수 A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 해설 이 문제는 단순한 두 수의 덧셈 문제이지만 두 수의 최대 범위가 1010000이다. Int의 범위는 -231~231-1이고, long의 범위는 -263~263-1이다. 따라서 정수형 자료형인 int, long을 사용하면 에러가 날 것이다. 따라서 문자열 형태로 이루어져 숫자의 범위가 무한한 BigInteger를 사용해야 한다. 코틀린에서는 자바의 BigInteger를 가져와 사용할 수 있다. 소스 코드 import java.math.BigInteger fun main() { val input =.. PS(Problem Solving)/BOJ 2021. 11. 4. [백준/BOJ] 1003번: 피보나치 함수 https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 문제 해설 이 문제는 n값에 대한 수열에서 재귀함수의 과정 중 fibonacci(0)과 fibonacci(1)이 몇 번 나오는지 구하는 것이다. 이제 n의 값에 따른 fibonacci(0)과 fibonacci(1)의 출력 횟수의 상관관계에 대해 보겠다. n fibonacci(n) fibonacci(0) fibonacci(1) 0 0 1 0 1 1 0 1 2 1 1 1 3 2 1 2 4 3 2 3 5 5 3 5 6 8 5 8 표를 보면 fibonacci(0)은 n이 0일 때를 제외하고는 fibo.. PS(Problem Solving)/BOJ 2021. 11. 3. [백준/BOJ] 1002번: 터렛 https://www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 문제 해설 이 문제에서는 이석원의 위치와 백승환의 위치로부터 류재영과의 거리를 알 수 있다. 따라서 한 지점에서 길이가 같은 점들의 집합인 원 두 개를 그려 접점의 개수를 확인하면 류재명이 있을 수 있는 좌표의 수를 알 수 있다. 우선 점점의 갯수에 대한 경우의 수를 보자. 두 점 사이의 거리를 d라 하고 다음에 의한 값을 갖는다는 것을 알아두자.$$\sqrt{(x2-x1)^2 + (y2-y1)^2}$$ 두 원의 중심과 반지름이 같을 때 점점이 없을.. PS(Problem Solving)/BOJ 2021. 11. 2. [백준/BOJ] 1000번: A+B https://www.acmicpc.net/problem/1000 1000번: A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 해설 두 정수를 입력받아 더한 값을 출력하면 된다. readLine()!!.split(" ")을 통해 입력받거나 Scanner를 통해 입력받을 수 있다. 소스코드 fun main() { val input = readLine()!!.split(" ") println(input[0].toInt() + input[1].toInt()) } import java.util.* fun main() { val sc: Scanner = Scanner(System.`in`) println(sc.nextInt() + sc.next.. PS(Problem Solving)/BOJ 2021. 11. 1. [백준/BOJ] 1001번: A-B https://www.acmicpc.net/problem/1001 1001번: A-B 두 정수 A와 B를 입력받은 다음, A-B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 해설 1000번: A+B와 마찬가지로 두 정수를 입력받고 차를 구하면 된다. 입력받는 방법은 이전과 동일하다. 소스코드 import java.util.* fun main() { val sc: Scanner = Scanner(System.`in`) println(sc.nextInt() - sc.nextInt()) } fun main() { val input = readLine()!!.split(" ") println(input[0].toInt() - input[1].toInt()) } PS(Problem Solving)/BOJ 2021. 11. 1. 코틀린(Kotlin) - 연산자 오버로딩과 기타 관례 어떤 클래스 안에 plus라는 이름의 특별한 메소드를 정의한다면 그 클래스의 인스턴스에 대해 + 연산자를 사용할 수 있다. 이런 식으로 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법을 코틀린에선 관례라고 한다. 코틀린에서는 언어 기능을 타입에 의존하는 자바와 달리 관례에 의존한다. 이는 기존 자바 클래스를 코틀린 언어에 적용하기 위해서이다. 기존 자바 클래스가 구현하는 인터페이스는 이미 고정돼 있고, 코틀린에서 자바 클래스가 새로운 인터페이스를 구현하게 만들 수 없다. 하지만 확장 함수를 사용하면 기존 클래스에 새로운 메소드를 추가할 수 있다. 따라서 기존 자바 코드를 바꾸지 않아도 새로운 기능을 쉽게 부여할 수 있게 된다. 산술 연산자 오버로딩 산술 연산자는 코틀린에서 관례를 사용하는 가.. Programming/Kotlin 2021. 10. 31. 이전 1 ··· 15 16 17 18 19 20 다음 728x90