얼레벌레

[Baekjoon] 한수 본문

Coding Test

[Baekjoon] 한수

낭낭이 2022. 2. 15. 22:31

문제


어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

 

입력


첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

 

출력


첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

예제 입력 1 

110

예제 출력 1 

99

예제 입력 2 

1

예제 출력 2 

1

예제 입력 3

210

예제 출력 3

105

예제 입력 4 

1000

예제 출력 4

144

예제 입력 5 

500

예제 출력 5 

119

 


 

▪️내가 생각한 코드  ҉ ٩(๑>ω<๑)۶҉

N = int(input())

def numCheck(i):
    l = len(str(i))
    sumSet = set(map(lambda x: int(str(i)[x]) - int(str(i)[x+1]), range(l-1)))
    return len(sumSet)

def seq(N):
    i, cnt = 1, 0
    while i <= N:
        if (i <= 99) | (numCheck(i) == 1):
            cnt += 1
        else:
            pass
        i += 1
    return cnt

print(seq(N))

 

✔️ 배운 것

  • brute-force search
  • set,map,lambda
  • while문에서의 pass와 continue의 차이점
    • continue: 해당 경우에 해당한다면, continue아래의 코드는 모두 실행하지 않는다. 처음에 continue로 했다가 i가 늘어나 있질 않아서 당황했다 
    • pass: 해당 경우에 해당한다면, 다른 코드 실행 없이 다음으로 넘어간다.
  • else: pass 를 쓰는 경우와 쓰지 않는 경우의 속도 차이

위에서부터 차례대로 N 받아올 때 input으로 받아오기 + else:pass 사용, N 받아올 때 sys.stdin.readline으로 받아오기 + else:pass 사용, N 받아올 때 input으로 받아오기 + else:pass 사용 X

숫자 하나만 받아오는 경우 input이 sys.stdin.readline보다 시간이 약간 빨랐다.

그리고 else: pass를 써서 넘기는 경우와 그렇지 않은 경우에 속도 차이가 매우매우 컸다 (68ms / 96ms)

'Coding Test' 카테고리의 다른 글

[Baekjoon] 알파벳 찾기  (0) 2022.02.17
[Baekjoon] 주사위 세개  (0) 2022.02.16
[Baekjoon] OX퀴즈  (0) 2022.02.14
[Programmers/Python3] 숫자 문자열과 영단어  (0) 2022.02.08
[Programmers/Python3] 최소직사각형  (0) 2022.02.05
Comments