본문 바로가기
코딩테스트

[Python] 백준 - 한수

by 박매트 2024. 5. 13.

https://www.acmicpc.net/problem/1065

 

나의 답

def check(i):
    if (len(str(i))<=2):
        return True
    
    diff = int(str(i)[1]) - int(str(i)[0])
    
    for index in range (1,len(str(i))):
        if (diff != int(str(i)[index]) - int(str(i)[index-1])):
            return False
    return True
        
N = int(input())
cnt = 0

for i in range(1,N+1):
    if check(i):
       cnt+=1

print(cnt)

 

N을 입력받으면 1~N까지 수에 등차수열인 수가 몇 개 있는 지 카운트하면 된다.

 

등차수열을 확인하고자 길이가 2 미만이면 등차수열이라고 판단했고,

길이가 3이상이면 첫번째 수와 두번째 수의 차이를 알아내서  그 다음 수 사이의 diff값이랑 동일한 지 확인했다.

 

 

다른 사람 답

n = int(input())
hansu = 0
 
for i in range(1, n+1):
    if i < 100:
        hansu += 1
    if i >= 100:
        temp1 = int(str(i)[0]) - int(str(i)[1])
        temp2 = int(str(i)[1]) - int(str(i)[2])
        if  temp1 == temp2:
            hansu+=1
 
print(hansu)
출처: https://ittrue.tistory.com/69 [IT is True:티스토리]

 

접근 방식은 비슷한 듯 싶다 !

 

Kotlin Version 답

import java.util.Scanner

fun check(i: Int): Boolean {
    if (i < 100) return true // 100미만의 수는 모두 한수

    val numStr = i.toString()
    val diff = numStr[1] - numStr[0]
    
    for (index in 1 until numStr.length) {
        if (diff != numStr[index] - numStr[index - 1]) {
            return false
        }
    }
    return true
}

fun main() {
    val scanner = Scanner(System.`in`)
    val N = scanner.nextInt()
    var cnt = 0

    for (i in 1..N) {
        if (check(i)) {
            cnt++
        }
    }

    println(cnt)
}

 

Key Point

  • i.toString
  • for (index in 1 until N)
  • for(index in 1..N)

'코딩테스트' 카테고리의 다른 글

[Python] 백준 - 덩치  (0) 2024.05.14
[Python] 백준 - 퇴사  (0) 2024.05.13
[Python] 백준 - 블랙잭  (0) 2024.05.13
[Python] 백준 - 영화감독 숌  (0) 2024.05.10
[Python] 백준 - 수 이어쓰기 1  (0) 2024.05.09