기초 수학
[기초수학] 군수열
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에 대한 조건만 봐주면 되니깐 더 편할 것 같다.