본문 바로가기
Algorithm/BAEKJOON

[BAEKJOON] 단계별로 풀어보기 5. 함수

by noey_hus 2022. 9. 16.

https://www.acmicpc.net/step/5

 

함수 단계

함수를 구현해 봅시다. (이 문제는 C, C++, Python, Java, Go만 지원합니다. 그 외의 언어를 사용하신다면 이 문제를 무시해 주세요.)

www.acmicpc.net

# 15596 : 정수 N개의 합

def solve(a):
  ans = sum(a)
  return ans

# 4673 : 셀프 넘버

def self_number():
  num_set = set(range(10001))
  not_self_num_set = set()
  
  for i in range(10001):
    not_self_num_set.add(i + i%10 + (i//10)%10 + (i//100)%10 + (i//1000)%10 + (i//10000)%10)

  result_list = sorted(list(num_set - not_self_num_set))

  for i in result_list:
    print(i)

self_number()

 

  1. for문을 이용하여 self number가 아닌 숫자들의 집합 만들기
    • i%10 : 일의 자리 숫자
    • (i//10)%10 : 십의 자리 숫자
    • (i//100)%10 : 백의 자리 숫자
    • (i//1000)%10 : 천의 자리 숫자
    • (i//10000)%10 : 만의 자리 숫자
  2. 1~10000의 숫자들의 집합과 self number가 아닌 숫자들의 집합의 차집합 구하기
    • num_set - not_self_number_set
  3. 리스트로 변형 후 오름차순 정렬하여 순서대로 출력하기

# 1065 : 한수

n = int(input())

def hansu(h):
  hansu_list = []
  for i in range(1, h+1):
    if i < 100:
      hansu_list.append(i)
    else:
      a = i//100 - (i%100)//10
      b = (i%100)//10 - i%10
      if a == b:
        hansu_list.append(i)

  return len(hansu_list)

print(hansu(n))

한 자리 수, 두 자리 수는 모두 한수임!!

세 자리 수 이상부터 고려하면 되는데, 입력의 최댓값이 1000이고 1000은 한수가 아니므로 세 자리 수만 고려함.

세 자리 수일 때, 백의 자리 수와 십의 자리 수의 차가 십의 자리 수와 일의 자리 수의 차와 같은지를 확인하여 hansu_list에 append 해주었다.