[BOJ]1024(python)

zzarbttoo·2021년 10월 13일
0

백준

목록 보기
7/18
post-custom-banner

| 1트

def solution(N, L):

    #print(N // L)
    now = L

    while now <= 100:

        #짝수 -> 
        point = N // now

        if now % 2 == 0:
            if point - (now / 2) < 0:
                break
            if 2 * point + 1 == N / (now / 2):
                #print("even porint ::: " + str(point))
                start = point - (now // 2)
                return [num for num in range(start , start + now)]
        # 홀수
        else:
            if (point - 1) - (now - 1) / 2 < 0:
                break
            if point == N // now:
                start = int(point - (now - 1) // 2)
                return [num for num in range(start ,start + now)]
        now += 1 

    return -1

N, L = map(int, input().split())
print(solution(N, L))
  • 짝수와 홀수를 나누어서 계산을 어떻게 해보려 했지만 실패했다
  • 애초에 문자열로 반환하라고 했는데 리스트로 반환하는 이상한 짓(?)을 해서 어차피 안되는 코드
  • 고쳐 써도 런타임 에러가 생긴다


| 2 ~ n트


def solution(N, L):

    for length in range(L, 101):
        start = (N - length * (length -1) / 2) / length
        int_start = int(start)

        if start == int_start and int_start >= 0:
            return " ".join(map(str, [num for num in range(int_start, int_start + length)]))

    return -1 



N , L = map(int, input().split())
print(solution(N, L))
  • N = 시작숫자 + (시작숫자 + 1) + ... + (시작숫자 + L - 1) 이라는 것을 이용해서 식을 세울 수 있다(고등학교 수학 필요)
N = L * 시작숫자 + L * (L - 1) / 2 
시작숫자 = (N - L*(L - 1) / 2) / L
  • 시작 숫자는 무조건 0 이상의 정수여야 한다(놀랍게도 0부터 시작해도 된다)
  • 리스트로 반환하는 것이 아니라 str 값으로 반환하는 것이기 때문에 리스트를 문자열로 변환했다(이거 빼먹고 했다가 엄청 많이 틀렸다)
  • 만일 길이가 100을 넘기거나 아예 그런 수가 없다면 -1을 return한다

오늘의 결론은 문제를 똑바로 읽어라....🤦‍♀️

profile
나는야 누워있는 개발머신
post-custom-banner

0개의 댓글