매일 백준의 알고리즘 문제를 풀며 3문제씩 풀며
한 언어를 마스터 할 것을 목표로 이 글을 작성할 예정입니다.
https://www.acmicpc.net/problem/10810
문제를 이해하는데 시간이 걸렸지만
간단히 하면 배열을 하나 만들고 i부터 j의 값에 k를 집어넣는 것으로 이해했다.
처음에 바구니의 배열을 정해줄 N을 받고 입력을 받을 범위 M을 받아주었다.
for문을 통해 M의 범위 만큼 입력을 받기에 until을 사용해 주었는데
..과until의 차이는 만약 N과 M이 있다면
..은 N ~ M까지 모든 숫자의 범위를 순환할 것이고
until은 N ~ M-1 만큼의 범위를 순환한다.
그 뒤로 바구니의 범위를 정해줄 i와 j를 받고 그 안에 들어갈 숫자를 k로 받아주었다.
모두 for문을 통해 배열 안 범위를 i부터 j의 바구니의 숫자를 모두 k로 바꾸어 주어야 하기에
인덱스 insert 안에는 i부터 j까지의 범위가 들어와 arrayN[insert - 1]의 값을 모두 k로 바꾸어주었다.
-1을 하는 이유는 인덱스는 [0]부터 시작하기 때문
그러면 쉽게 풀 수 있다.
import java.util.Scanner
fun main() {
val sc = Scanner(System.`in`)
val N = sc.nextInt()
val M = sc.nextInt()
val arrayN = IntArray(N)
val result = StringBuilder()
for(m: Int in 0 until M) {
val i = sc.nextInt()
val j = sc.nextInt()
val k = sc.nextInt()
for (insert: Int in i..j) {
arrayN[insert - 1] = k
}
}
for (i in arrayN) {
result.append("$i ")
}
println(result)
sc.close()
}
https://www.acmicpc.net/problem/10813
위 문제와 유사한데 다른 점이라면
바구니에는 내가 N만큼 배열이 있고 그 안에는 1부터 N만큼의 숫자가 채워져있다.
그래서 그 바구니 안에 i와 j의 순서를 변경하는 문제였다.
그러면 1부터 N까지의 배열을 만들어 주어야 한다.
그렇기 위해서IntArray(N) { it + 1 }이 필요했다.
처음에는 for문으로 만들까도 생각했지만 간단하게 생성하는 방법을 찾았다.
그리고 i와 j의 순서를 바꾸는데 처음부터 arrayN[i] = arrayN[j]를 사용하게 되면
i안의 값은 j가 되어 j는 바꿀 수 없게 될 것이다.
그렇기에 i의 값을 따로 보관을 해주기 위해서 k를 만들어 주었고,
모두 바꿔준 배열을 출력을 위해 result에 다시 담아주었다.
import java.util.Scanner
fun main() {
val sc = Scanner(System.`in`)
val N = sc.nextInt()
val M = sc.nextInt()
val arrayN = IntArray(N) {it + 1}
val result = StringBuilder()
for (y : Int in 0 until M){
val i = sc.nextInt()
val j = sc.nextInt()
val k = arrayN[i - 1]
arrayN[i - 1] = arrayN[j - 1]
arrayN[j - 1] = k
}
for (a in arrayN){
result.append("$a ")
}
println(result)
sc.close()
}
https://www.acmicpc.net/problem/5597
이 문제는 처음부터 for문이 28번 돌 것이라고 문제에서 제시해주었기에
1 .. 28 만큼 도는 for문을 만들어 주었고
그 위에 1부터 30까지의 배열을 만들어주는데 이것은 변경가능하도록 뒤에.toMutableList()를 붙였다.
그 이유는 배열안에 같은 값이 있으면.remove()를 통해 삭제하기 위함이다.
그 뒤에 2개의 배열을 출력하면 된다.
import java.util.Scanner
fun main() {
val sc = Scanner(System.`in`)
val arrayX = IntArray(30) { it + 1 }.toMutableList()
for (x in 1 .. 28) {
val num = sc.nextInt()
if (num in arrayX) {
arrayX.remove(num)
}
}
println("${arrayX[0]}\n${arrayX[1]}")
}
내가 몰랐던 내부함수들을 잘 알아둘 필요가 있다 생각했고
for문과 배열의 활용방법을 알 수 있었던 좋은 방법이다.
또한 문제의 의도를 빠르게 파악할 줄 알야아 할 것 같다.