문제 출처: 백준 1065번 한수

문제


스크린샷 2022-07-18 오후 2 15 32

풀이


저한테는 난이도가 좀 있는 문제였는데요… 우선 문제를 살펴보시면 99 이하의 자연수는 모두 한수입니다. 최대 자릿수가 2인데요 이 숫자들의 차이가 무엇이 되든 일정하다고 보기 때문에 입력값이 99 이하라면 그냥 그 수를 출력하면 됩니다. 그 이후엔 1,000이하의 자연수 이므로 1,000은 이미 한수가 아니므로 계산해야 할 숫자의 자릿수는 세 자리 라는 점을 이용해 풀면 어렵지 않게 풀 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/// 자연수 N
let N = Int(readLine()!)!

// 99이하일 경우 N출력
if N < 100 {
  print(N)
  } else {
  // 99까지 한수의 개수
  var count = 99
  // 100부터 N까지 반복문 실행
  for i in 100...N {
    // 각 자리수 저장
    let first = i / 100
    let second = (i % 100) / 10
    let third = (i % 100) % 10

    // 한수인지 판단
    if first - second == second - third {
      count += 1
    }
  }

  // 결과 출력
  print(count)
  }
}
  1. 숫자를 입력받아 Int 형으로 변환합니다.
  2. 입력받은 수가 100보다 작으면 입력받은 수를 바로 출력합니다.
  3. 100 이상일 경우 100부터 N까지 반복문을 실행합니다.
  4. 100부터 각 숫자의 자릿수를 구해 한수인지 판단 후 count를 증가시킵니다.

이렇게 풀 경우 메모리: 64044 KB, 시간: 8 ms 결과가 나오게 됩니다.

업데이트:

댓글남기기