백준 문제 푼거 정리
함수 사용하기
4673 셀프넘버
d(n) = n + 각 자리수의 합
몇 가지 방법을 찾아봤다. 전체 숫자 집합에서 생성자가 있는 집합을 빼면 된다. 이렇게 생각하니 방법은 간단하다.
에라토스테네스의 체
소수를 찾아내는 방법 중 하나이다.
key
※ 숫자를 문자로 변환하고 문자 하나하나씩 i에 누적하여 더해주면 각 자리 수의 값을 더한 걸 구할 수 있다.
import sys
def r1(): return sys.stdin.readline()
# 1단계 전체집합 만들기
a = set(range(1, 10001))
# 2단계 생성자 집합 만들기
b = set()
for i in a:
for j in str(i):
i += int(j)
b.add(i)
c = sorted(a-b)
# 3단계 한줄로 출력하기
for i in c:
print(i)
1065번 한수
양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열이란 연속된 두 개 수의 차이가 일정한 수열을 말한다. 입력 받은 N보다 작은 한수의 개수를 출력해라. ( N<= 1000 자연수)
※ Vacuous truth
어떤 전제에 해당하는 것 자체가 존재하지 않는다면, 그 문장은 무조건 참으로 간주된다는 뜻
따라서 연속된 두 개의 수라는 것 자체가 존재하지 않는다면, 항상 참이다.
따라서 1~9까지. 등차수열. 하나밖에 없으므로 10~99까지 등차수열 따라서 100전까지는 무조건 99개.
생각한 방법
- 각 자리 수를 구한다.
- 백의자리와 십의자리의 차가 , 십의자리와 일의 자리의 차와 같은지를 구한다. (절댓값으로 구한다) -> 이렇게 하면 반례가 404에서 반례가 생긴다. –> 다른 방법 필요
찾은 방법
입력받은 값을 넣은 리스트를 생성 첫 번쨰 리스트의 세번쨰 자리수 제거 두번째 리스트의 첫번쨰 수 제거 이후 차를 구한 뒤, 각 자리수끼리 같다면 count를 +=1 한다.
리스트 요소 제거 (remove)
revmove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수이다.
여기서는 del을 쓰면 원본이 삭제되므로 간단하다. del을 사용하면 메모리에 생성된 변수를 없앤다.
list
list(s)는 반복 가능한 자료형 s를 입력 받아 리스트로 만들어 리턴하는 함수이다.
※ 이중포문을 쓸 필요가 없다.
지난번 코드를 참조하여
for i in list(str(N)):
for j in str(i):
list_A.append(j)
print(list_A)
이런 식으로 생각하였지만 이럴 필요가 없다.
사실 int로 입력을 받아서
list_A = list(str(N))
, 즉 list함수를 사용해주면 문제가 해결된다.
이 문제는 어려워서 다른분 풀이 참고하였다. 특히 전체 while문을 얼만큼 돌까에 대한 의문에서, 다른 분은 반복문 조건을 N>0으로 해놓은 뒤 한바퀴 돌때마다 N-=1을 해준점에 착안하여 코드를 작성하였다.
import sys
rl = lambda: sys.stdin.readline()
N = int(rl())
count = 0 # 출력하는 값
while N > 0: # 입력값이 1이상이면 반복
if(N>100): # 입력값이 100 이상일 때
list_A = list(str(N))
list_B = list_A[:]
# 자리수 맞추기 위해 값 삭제
del list_A[-1]
del list_B[0]
if( int(list_A[0])-int(list_B[0]) == int(list_A[1]) - int(list_B[1])):
count+=1
elif N < 100 : # 1부터 99까지 모두 등차수열이다.
count+=N
break
N -= 1
print(count)
2448번 별찍기 - 11
-> 추후에 다시 풀기
문제분석
3*2의k승
입력 예제 -> 3,6,12,24,48 등. 이 때 k는 k<=10이하)
현 단계 삼각형 두개를 만들어서 뒤에 붙이고 현 단계 삼각형을 오른쪽으로 민다. -> 얼마나 밀거냐?
N=3일 때, 0칸 N=6일 때, 3칸 N=12일 때, 6칸 N=32^이므로, 오른쪽으로 미는 칸 수는 32^(k-1)
참고자료
4673번 문제풀이 참고 https://oneshottenkill.tistory.com/14
4673번 문제풀이 참고 https://zetawiki.com/wiki/BOJ_4673%EC%85%80%ED%94%84%EB%84%98%EB%B2%84
https://m.blog.naver.com/PostView.nhn?blogId=occidere&logNo=220814758752&proxyReferer=https%3A%2F%2Fwww.google.com%2F
1065번 한수 https://www.acmicpc.net/board/view/32637 https://oneshottenkill.tistory.com/15
2448번 문제풀이 참고
https://lazineer.tistory.com/179