1. 저주의 숫자 3

3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.

10진법 3x 마을에서 쓰는 숫자 10진법 3x 마을에서 쓰는 숫자
1 1 6 8
2 2 7 10
3 4 8 11
4 5 9 14
5 7 10 16

정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 100

코드 작성

def solution(n):
    town = []
    for i in range(1, n*3):
        # 3의 배수거나 3이 들어가는 경우는 pass
        if i % 3 == 0 or '3' in str(i):
            pass
        else:
            town.append(i)
        if len(town) == n:
            break
      
    return town[n-1]


2. 평행

점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.

[[x1, y1], [x2, y2], [x3, y3], [x4, y4]] 주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

제한사항

  • dots의 길이 = 4
  • dots의 원소는 [x, y] 형태이며 x, y는 정수입니다.
    • 0 ≤ x, y ≤ 100
  • 서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.
  • 두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요.
  • 임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.

코드 작성

def solution(dots):
    dot = dots[0]
    dots = dots[1:]
    for i in range(len(dots)):
        dx1 = dot[0] - dots[i][0]
        dy1 = dot[1] - dots[i][1]
        
        dx2 = dots[i-1][0] - dots[i-2][0]
        dy2 = dots[i-1][1] - dots[i-2][1]
        
        slope1 = dy1/dx1
        slope2 = dy2/dx2
        
        if slope1 == slope2:
            return 1
        
    return 0


3. 겹치는 선분의 길이

선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.

제한사항

  • lines의 길이 = 3
  • lines의 원소의 길이 = 2
  • 모든 선분은 길이가 1 이상입니다.
  • lines의 원소는 [a, b] 형태이며, a, b는 각각 선분의 양 끝점 입니다.
    • -100 ≤ a < b ≤ 100

코드 작성

def solution(lines):
    # 각 선분들이 존재하는 영역을 리스트에 담는다.
    sets = [set(range(min(l), max(l))) for l in lines]
    return len(sets[0] & sets[1] | sets[0] & sets[2] | sets[1] & sets[2])


4. 유한소수 판별하기

소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.

기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다. 두 정수 ab가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.

제한사항

  • a, b는 정수
  • 0 < a ≤ 1,000
  • 0 < b ≤ 1,000

코드 작성

def solution(a, b):
    # 기약분수 만들기 위해 최대공약수 구하기
    min_num = min([a, b])
    gcd = 0
    for n in range(1, min_num+1):
        if a % n == 0 and b % n == 0:
            gcd = n
    
    # 기약분수 형태로 만들기
    if gcd != 1:
        a = int(a/gcd)
        b = int(b/gcd)
    
    # 분모, 분자 같은 경우
    if a == b:
        return 1

    # 분모가 2, 5로만 이루어졌는지 확인하기
    num = b
    for i in [2, 5]:
        while num % i == 0:
            num //= i
        if num == 1:
            return 1

    return 2


👩🏻‍💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.

댓글남기기