[1. 문제 재정의 및 추상화]
문제에서 한수에 대한 정의
=> 어떤 양의 정수 X의 각 자리가 등차수열을 이루는 수
요구사항
=> N 이 주어졌을 때 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력
- 1 <= N <= 1000
[2. 해결 계획]
- 각 자리가 등차수열을 이룬다는 것은 각 자리의 차이가 전부 같다는 것을 이용
- 각 자리의 차이는 [-9, 9] 에 속함
- 각 자리를 배열로 만들 때, 1의 자리가 배열의 첫번째에 오든 마지막에 오는 것은 중요하지 않다
 배열 내에서 인접하기만 하면 됨.
[3. 계획 검증]
- 각 자리 수를 추출하는 것은 상수시간
- 추출된 자리 수 배열의 길이는 최대 4 이므로 이 배열을 조회하는 것 역시 상수시간이라 볼 수 있다.
[4. 구현]
package main
import (
	"fmt"
)
func is_target(value int) int {
	sn := make([]int, 0, 4)
	for value > 0 {
		sn = append(sn, value%10)
		value /= 10
	}
	is_ar := true
	prev_adj := -10 // -9 ~ 0 or 0 ~ 9
	for idx := 0; idx < len(sn)-1; idx++ {
		adj := sn[idx] - sn[idx+1]
        // 아직 공차를 구하지 않은 상태
		if prev_adj == -10 {
			prev_adj = adj
		} else if prev_adj != adj {
            // 공차가 다르므로 한수가 아님
			is_ar = false
			break
		}
	}
	if is_ar {
		return 1
	} else {
		return 0
	}
}
func main() {
	T := 0
	v := 1
	count := 0
	fmt.Scanf("%d\n", &T)
	for v <= T {
		count += is_target(v)
		v++
	}
	fmt.Println(count)
}'알고리즘 > Baekjoon' 카테고리의 다른 글
| [1021]. 회전하는 큐 (0) | 2022.08.22 | 
|---|---|
| [1316] 그룹 단어 체커 (1) | 2022.02.05 | 
| [2941] 크로아티아 알파벳 (0) | 2022.02.05 | 
| [1157] 단어 공부 (0) | 2022.02.05 | 
| [4673] 셀프 넘버 (0) | 2022.02.05 |