기초 수학

[기초수학] 군수열

scone 2022. 4. 28. 18:40

[개념]

  • 여러개의 항을 묶었을 때 규칙성을 가지는 수열

  • 위 군수열은 그룹별로 묶은 각 군 안에서 등차 수열을 이룬다.
  • 가령 50번째 항을 구한다고 해보자.

1군에 1개 항, 2군에 2개 항, 3군에 3개 항 ...  항의 갯수가 다음과 같은 규칙성을 가지므로, 9군까지 총 \( (1+9)*9/2 = 45 \) 항을 갖게 되고 우리가 구하고자 하는 항은 10군의 5번째 항이 되게 된다.

\(\therefore\ \)50번째 항의 값은 : 5 이다.

 

다른 예를 봐보자.

 

다음과 같은 꼴 또한 군수열이다.

다음 군수열의 53번째 항의 값을 구하시오.

=> 9군까지 45개, 따라서 10군의 8번째 항이 된다. 따라서 \( { 8 \over 3} \)


[실습1] 

inputN = int(input('n 항 입력 : '))
n = 1
c = 0
searchN = 0
flag = True
while flag:
    for i in range(1,n+1):
        print(i, end=' ')
        c += 1
        if c == inputN:
            searchN = i
            flag = False
            break
    n +=1
    print()
print('{}항 값은 {}'.format(inputN,searchN))
'''
n 항 입력 : 50
1 
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
1 2 3 4 5
50항 값은 5
'''

코드해석

for 문 안에서 하나의 군 안에서 반복

n이 1이 더해지며, while 문으로 다음 군에서 반복

입력 항에 도달 시 flag가 False가 되며 break으로 for문 반복 빠져나오고, while 반복문도 종료

 


[실습2] 

inputN = int(input())
flag = True
n=1
c=0
ans=0
while flag :
    for i in range(1,n+1):
        print('{}/{}'.format(i,n+1-i),end=' ')
        c += 1
        if c == inputN :
            ans = '{}/{}'.format(i,n+1-i)
            flag = False
            break
    n += 1
    print()
print('{}항은 {}'.format(inputN,ans))
'''
25
1/1 
1/2 2/1
1/3 2/2 3/1
1/4 2/3 3/2 4/1
1/5 2/4 3/3 4/2 5/1
1/6 2/5 3/4 4/3 5/2 6/1
1/7 2/6 3/5 4/4
25항은 4/4
'''

 

느낀 점 하나..

 

while 안에 for문이 돌아가고 있는 상황에서

flag라는 변수에 bool을 집어넣어서 while 문 탈출 조건을 만들면

break을 굳이 두 번 쓰지 않아도 된다는거.

 

for문 안에서 flag를 False로 바꾸고 break 하면

for문 빠져나가고, while 문은 flag가 False 이므로 탈출하게 된다는거.

 

이렇게 하면 나중에 while문 탈출 조건을 변경할 때 코드 쭉 다 봐야할 필요없이

flag에 대한 조건만 봐주면 되니깐 더 편할 것 같다.