[백준] 1408번: 24 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1236번: 성 지키기성의 세로 길이 N과 가로 길이 M이 주어지고, 각 칸에 ‘X’ 또는 ‘.’이 적혀 있다. 각 행과 열마다 최소 하나의 경비(‘X’)가 있어야 할 때, 추가로 설치해야 하는 경비의 최소 수를 구하는 문제이다.www.acmicpc.net풀이 초부터 시까지 차례대로 빼고, 음수가 될 때마다 윗 단위에서 1을 빌려와 보정해 주는 방식으로 두 시간의 차이를 계산한다. 코드 fun main() { val now = readln().split(':').map { it.toInt() } val start = readln().split(':').map { it.toInt() } var h = start[0] - now[0] var m = start[1] - now[1]..
[백준] 5555번: 반지 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 5555번: 반지당신은 N개의 반지를 가지고 있다. 각각의 반지는 대문자 10문자로 이루어진 문자열이 새겨져 있다. 반지는 문자열의 시작과 끝이 연결된 형태이다. 찾으려는 문자열이 주어졌을 때 그 문자열을 포함하는 반지의 개수를 구하는 문제이다.www.acmicpc.net 풀이 문제에서는 반지 모양의 문자열이 여러 개 주어지고 그중 찾고자 하는 문자열이 포함된 반지의 개수를 세는 것이 목표이다. 반지는 원형이기 때문에, 예를 들어 "ABCDE"라는 문자열에서는 "CDEAB", "DEABC" 같은 회전된 형태로도 문자열이 등장할 수 있다. 입력받은 문자열을 반지처럼 순환하도록 만드려면 문자열을 두 번 이어붙여 확인하면 된다. 코드 fun main() { var cnt = 0 val w..
[백준] 1358번: 하키- Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1358번: 하키W×H 크기의 링크장(X,Y 위치)와 P명의 선수 좌표가 주어진다. 링크장 직사각형 부분과 양쪽 반원 부분에 선수들이 들어왔는지 판별해 총 인원수를 구하는 문제이다.www.acmicpc.net 풀이 하키 필드 전체를 세 구역(왼쪽 반원 + 직사각형 + 오른쪽 반원)으로 나누고, 각 사람의 좌표가 이 세 영역 중 하나라도 포함되면 카운트하는 방식으로 해결할 수 있다. 반원 2개는 세로 길이 h를 지름으로 가지는 원의 절반으로 왼쪽 반원의 중심은 (x, y + h/2)이고 오른쪽 반원의 중심은 (x + w, y + h/2)이다.입력받은 좌표 (a, b)가 다음 조건 중 하나라도 만족하면 필드 안에 있는 것으로 판단하고 세어준다.1. 직사각형 내부: $ x \le a \le x ..
[백준] 1834번: 나머지와 몫이 같은 수 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1834번: 나머지와 몫이 같은 수N으로 나누었을 때 나머지와 몫이 같은 모든 자연수의 합을 구하는 문제이다. 예컨대 N=3일 때 나머지·몫이 모두 같은 수는 4와 8이므로, 이들의 합은 12이다.www.acmicpc.net 풀이 임의의 수 x를 n으로 나눌 때, 몫을 q, 나머지를 r이라 하면$$ x = n \times q + r $$문제의 조건은 $q = r$이므로,$$ x = n \times r + r = r \times (n + 1) $$ 이 된다.나머지는 $ 0 \le r $$ r \times (n + 1) \quad (r = 1, 2, \dots, n-1) $$ 코드 fun main() { val num = readln().toLong() var ans = 0L for ..
[백준] 10431번: 줄세우기- Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 10431번: 줄 세우기여러 학생들이 줄을 서야 한다. 각 학생은 1부터 N까지 번호가 매겨져 있고, 현재 줄 서 있는 순서가 주어졌을 때 학생들이 자신의 번호 순서대로 한 명씩 오도록 정렬하는데 걸리는 시간을 계산하는 문제이다.www.acmicpc.net풀이 입력받은 배열에서 차례대로 자기 앞과 비교하고 키가 큰 학생이 존재한다면 이동한다. 원래 위치에서 이동한 위치를 뺀 수를 더해주면 학생들이 총 몇 번 뒤로 물러섰는지 알 수 있다. 코드 fun main() { val sb = StringBuilder() repeat(readln().toInt()) { val arr = readln().split(' ').map { it.toInt() }.toIntArray() ..