Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
27 | 28 | 29 | 30 |
Tags
- Python
- 고득점kit
- 파이썬
- BFS
- 알고리즘
- Sort
- dfs
- 최단거리
- 프리코스
- 코딩테스트
- JS
- 우테코
- node.js
- npm
- 자바스크립트
- JavaScript
- 프론트엔드
- OpenCV
- 문자열
- 함수
- 그래프
- Linux
- 웹개발
- 그리디
- 프로그래머스
- JetsonNano
- 우아한테크코스
- express
- 백준
- 코테
Archives
- Today
- Total
공대생
백준 4673 셀프넘버 Python 본문
실버 5 난이도의 문제.
처음 접근은 리스트로 시작했다. 리스트에 1~10000까지의 숫자를 넣고 셀프넘버가 아닌 수들의 리스트를 만들어 두 리스트의 차집합(?)을 구하려고 하였다.
또한 d(n) 함수도 n이 100보다 작을 땐 d(n) = n + n/10 + n%10
100보다 크고 1000보다 작을 땐 d(n) = n + n/100 + (n-100)/10 + (n-100)%10
이런식으로 조건문을 이용해 구할 생각이었다.
하지만 이렇게 코드를 짜면 n이 10000 이상이 될 때는 코드를 다시짜야하는 비효율적인 코드라고 생각하고 다시 찾아보니 n을 str로 변환하면 해당 문자열을 for문을 이용해 한글자씩 떼어낼 수 있다는 것을 알아냈다.
예를 들어
a = str(408)
for i in a:
print(i)
이면
4
0
8
이렇게 출력되는 것이다.
이를 이용해서 생성자가 있는 수들을 모두 찾아 c_list에 집어넣도록 했다.
1~10000까지 들어있는 original_list를 만들고 이 리스트에서 c_list의 차집합을 구해 해당 집합을 출력하면 정답이 된다.
리스트 이용
def d(n):
con = 0
s = str(n)
for a in s:
con += int(a)
return n+con
original_list = list(range(1, 10001))
c_list = list()
for z in range (1, 10001):
c_list.append(d(z))
result = set(original_list) - set(c_list)
for r in sorted(result):
print(r)
리스트 말고 집합으로 하는 방법도 성공하여 두가지 방법으로 풀었다.
집합 이용
def d(n):
con = 0
s = str(n)
for a in s:
con += int(a)
return n+con
original_list = set(range(1, 10001))
c_list = set()
for z in range (1, 10001):
c_list.add(d(z))
result = original_list - c_list
for r in sorted(result):
print(r)
'스터디 > 백준' 카테고리의 다른 글
백준 1012 유기농배추 Python (0) | 2022.05.21 |
---|---|
백준 18111 마인크래프트 Python (0) | 2022.05.19 |
백준 11401 이항 계수 3 Python (0) | 2022.03.06 |
백준 5622 다이얼 Python (0) | 2022.01.04 |
백준 2908 상수 Python (0) | 2022.01.04 |
Comments