전체글397 [백준/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. C언어 - 매크로와 선행처리기(preprocessor) 선행처리 선행처리는 컴파일 이전의 처리를 의미한다. 선행처리는 선행처리기에 의해, 컴파일은 컴파일러에 의해, 링크는 링커에 의해 진행이 된다. 컴파일 과정을 거치면 바이너리 데이터로 이뤄진 오브젝트 파일이 생성된다. 하지만 컴파일 이전에 진행되는 선행처리 과정을 거쳐 생성되는 파일은 그냥 소스파일이다. 선행처리기가 하는 일은 매우 단순한데, 삽입해 놓은 선행처리 명령문대로 소스코드의 일부를 수정한다. 여기서 수정이란, 단순 치환의 형태를 띠는 경우가 대부분이다. 선행처리 명령문은 # 키워드로 시작하며, 컴파일러가 아닌 선행처리기에 의해 처리되기 때문에 끝에 세미클론(;)을 붙일 필요가 없다. #define PI 3.14 위와 같은 명령문이 삽입돼 있는 소스파일을 선행처리의 과정에서 변환되는 것을 보자. .. Programming/C 2021. 10. 27. 코틀린(Kotlin) - 컬렉션과 배열 널 가능성과 컬렉션 컬렉션 안에 널 값을 넣을 수 있는지의 여부는 어떤 변수의 값이 널이 될 수 있는지 여부와 같이 중요하다. 컬렉션 타입 인자 뒤에 ?를 붙이면 널이 될 수 있는 값으로 이루어진 컬렉션을 만들 수 있다. fun readNumbers(reader: BufferedReader) : List { val result = ArrayList() for (line in reader.lineSequence()) { try { val number = line.toInt() result.add(number) } catch(e: NumberFormatException) { result.add(null) } } return result } 코드를 보면 2행에서 List를 볼 수 있다. List는 Int? 타.. Programming/Kotlin 2021. 10. 24. 이전 1 ··· 27 28 29 30 31 32 33 34 다음 728x90