좌충우돌 개발자의 길

백준 알고리즘 | 1193번 (분수찾기) | 파이썬 본문

카테고리 없음

백준 알고리즘 | 1193번 (분수찾기) | 파이썬

sustronaut 2021. 7. 11. 19:42

1193번 (분수찾기)

  • 무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

  • 이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
  • X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
num = int(input())
i = 1
answer = 0


if num == 1:
    print(1, 1, sep="/")

else:
		# 1줄->1개 2줄->2개 3줄->3개 ... n줄->n개 몇번째 줄인지 파악 
    while 1:
        if i % 2 == 0:
            a = (1+i)*(i//2)
            if(a == num):
                answer = i
                break
            elif(a > num):
                answer = i
                break
            else:
                i = i+1
        elif (i % 2 == 1):
            a = (1+i)*(i//2)+((i//2)+1)
            if(a == num):
                answer = i
                break
            elif(a > num):
                answer = i
                break
            else:
                i = i+1

    # print(answer)
		
#해당 줄에 있는 모든 분수들 배열에 집어넣기
    arr = []
    k = 0
    if(i % 2 == 0):
        for j in range(1, i+1):
            if(j == 1):
                # print(i, "/", j)
                arr.append([])
                arr[k].append(j)
                arr[k].append(i)
                k += 1
            else:
                i -= 1
                # print(i, "/", j)
                arr.append([])
                arr[k].append(j)
                arr[k].append(i)
                k += 1
    else:
        for j in range(1, i+1):
            if(j == 1):
                # print(j, "/", i)
                arr.append([])
                arr[k].append(i)
                arr[k].append(j)
                k += 1
            else:
                i -= 1
                # print(j, "/", i)
                arr.append([])
                arr[k].append(i)
                arr[k].append(j)
                k += 1

    # print(arr)
    # print(answer)

# n줄의 몇번째에 위치했는지 파악해 출력하기
    mk = answer-1
    if(mk % 2 == 0):
        num2 = (1+mk)*(mk//2)
        total = num-num2-1
        if(total >= 0):
            print(arr[total][0], arr[total][1], sep='/')
    elif (mk % 2 == 1):
        num2 = (1+mk)*(mk//2)+((mk//2)+1)
        total = num-num2-1
        if(total >= 0):
            print(arr[total][0], arr[total][1], sep='/')

 

 

새롭게 배운 것

  • sep='/' 으로 출력시 나눠지게 할수 있음
  • 다차원 리스트 생성 및 추가
arr=[]
arr.append([])
arr[k].append(i)
arr[k].append(j)

#==> [[1,2]]