안녕하세요 gyub(귭)입니다 ㅎㅎㅎ
이번엔 백준 알고리즘 1065번 한수 문제입니다.
https://www.acmicpc.net/problem/1065
문제를 요약하자면 주어지는 수의 각 자리 숫자가 등차수열을 이루는 수의 개수를 구하는 문제입니다!
(아 참고로 이 문제는 브루트포스(완전탐색)으로 푸시면 됩니다유)
코드를 보여드리기 앞서 접근 방식에 대해 설명하겠습니다 ^~^
등차수열이라고 했으니 각 자리의 수의 차가 같을겁니다!
그렇다면 앞의 두 수의 차가 고대로 쭉쭉쭉쭉 다른 연속된 두 수의 차와도 같겠져?
예로 4321이 주어졌다고 칩시다
4 와 3의 차이는 1이죠!
만약 4321이 '한수'라면 뒤에 나오는 연속된 두 수의 차도 1일겁니다!!
물론 우리는 4321을 보고 바로 아 한수 맞네 라고 생각할 수 있지만 컴퓨터는 그러지 못해요 ㅠ
그럼 다시 문제로 돌아와서 3과 2 , 2와 1 을 탐색해봅시다
3과 2의 차이는 1
2와 1의 차이도 1이네요!!!!
그럼 요게 '한수'가 되어버리는거쥬
이때! 문제에서는 '한수'의 개수를 구하라고 했으니 이때 answer++을 해주면 됩니다
주요 코드를 보여드리겠습니다리 (전체 코드는 하단에 깃허브에 올려놨어열)
for (i in s.toInt() downTo 1) {
val t = i.toString()
var isAnswer = true
if (t.length == 1) {
answer++
} else {
val tmp = t[0].toString().toInt() - t[1].toString().toInt()
for (j in 0 until t.lastIndex) {
if (tmp!=t[j].toString().toInt() - t[j+1].toString().toInt())
isAnswer= false
}
if (isAnswer) answer++
}
}
문제를 풀고 다른 분들은 어떻게 풀었나봤는데 % 와 /를 이용하여 각 자리 수를 활용(?)하셨더라구여
근데 저는 문자열 처리가 더 간편해서 요렇게 풀었습니다
전체코드입니다
https://github.com/Songgyubin/Algorithm/blob/master/baekjoon/BOJ_1065.kt
이해가 안 가시는 분봐주셔서 감사합니다!
질문이나 수정되어야 할 부분이 있다면 댓글로 남겨주세요!
'알고리즘' 카테고리의 다른 글
[ 알고리즘 / kotlin ] 백준 2573 빙산 (0) | 2020.07.06 |
---|---|
[ 알고리즘 / kotlin ] 백준 7568 덩치 (0) | 2020.07.05 |
[ 알고리즘 / kotlin ] 최소공배수 - 최대공약수 활용 (0) | 2020.04.29 |
[ 알고리즘 / kotlin ] 프로그래머스 lv2 멀쩡한 사각형 (0) | 2020.04.29 |
[ 알고리즘 / kotlin ] 최대공약수 구하기 - 유클리드 호제법 (0) | 2020.04.29 |