Code/Algorithm

[Algorithm] 알고리즘 기초_2

heedy 2022. 11. 18. 16:40
728x90

01 - 2 반복하는 알고리즘

실습 1-7 1부터 n까지 정수의 합 구하기 1(while 문)

# 1부터 n까지 정수의 합 구하기 1 (while 문)

print('1부터 n까지 정수의 합을 구합니다.')
n = int(input('n값을 입력하세요.: '))

sum = 0
i = 1

while i <= n:
  sum += i
  i += 1

print(f'1부터 {n}까지 정수의 합은 {sum}입니다.')
1부터 n까지 정수의 합을 구합니다.
n값을 입력하세요.: 36
1부터 36까지 정수의 합은 666입니다.

while 문 반복 알아보기

더보기
더보기

반복 구조(repetition structure): 어떤 조건이 성립하는 동안 반복해서 처리(프로그램 명령문 또는 명령어의 집합)하는 것, 일반적으로 루프(loop)라고 함.

 

while문은 전에 반복을 계속할 것인지를 판단하는데, 이런 구조를 사전 판단 반복구조 라고 함.

실습 1-8 1부터 n까지 정수의 합 구하기 2(for 문)

# 1부터 n까지 정수의 합 구하기 2(for문)

print('1부터 n까지 정수의 합을 구합니다.')
n = int(input('n값을 입력하세요.: '))

sum = 0
for i in range(1, n+1):
  sum += i

print(f'1부터 {n}까지 정수의 합은 {sum}입니다.')
1부터 n까지 정수의 합을 구합니다.
n값을 입력하세요.: 34
1부터 34까지 정수의 합은 595입니다.

연속하는 정수의 합을 구하기 위해 값 정렬하기

실습 1-9 a부터 b까지 정수의 합 구하기(for 문)

# a부터 b까지 정수의 합 구하기(for문)

print('a부터 b까지 정수의 합을 구합니다.')
a = int(input('정수 a를 입력하세요.: '))
b = int(input('정수 b를 입력하세요.: '))

if a> b:
  a,b = b, a

sum = 0
for i in range(a, b+1):
  sum += i


print(f'{a}부터 {b}까지 정수의 합은 {sum}입니다.')
a부터 b까지 정수의 합을 구합니다.
정수 a를 입력하세요.: 3
정수 b를 입력하세요.: 64
3부터 64까지 정수의 합은 2077입니다.

a와 b를 교환할 때

a, b = b, a # a와 b의 값을 교환(단일 대입문 사용)

반복 과정에서 조건 판단하기 1

실습 1-10 a부터 b까지 정수의 합 구하기1

# a부터 b까지 정수의 합 구하기 1

print('a부터 b까지 정수의 합을 구합니다.')
a = int(input('정수 a를 입력하세요.: '))
b = int(input('정수 b를 입력하세요.: '))

if a > b:
  a, b = b, a

sum = 0
for i in range(a, b + 1):
  if i < b:
    print(f'{i} + ', end = '')
  else:
    print(f'{i} = ', end = '')
  sum += i

print(sum)
a부터 b까지 정수의 합을 구합니다.
정수 a를 입력하세요.: 2
정수 b를 입력하세요.: 53
2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 = 1430

실습 1-11 a부터 b까지 정수의 합 구하기2

# a부터 b까지 정수의 합 구하기 2

print('a부터 b까지 정수의 합을 구합니다.')
a = int(input('정수 a를 입력하세요.: '))
b = int(input('정수 b를 입력하세요.: '))

if a > b:
  a, b = b, a

sum = 0
for i in range(a, b):
  if i < b:
    print(f'{i} + ', end = '')
    sum += i
print(f'{b} = ', end = '')
sum += b

print(sum)
a부터 b까지 정수의 합을 구합니다.
정수 a를 입력하세요.: 4
정수 b를 입력하세요.: 9
4 + 5 + 6 + 7 + 8 + 9 = 39

반복 과정에서 조건 판단하기 2

실습 1-12 +와 -를 번갈아 출력하기 1

# +와 -를 번갈아 출력하기 1

print('+와 -를 번갈아 출력합니다.')
n = int(input('몇 개를 출력할까요?: '))

for i in range(n):
  if i % 2:
    print('-', end='')
  else:
    print('+', end='')

print()
+와 -를 번갈아 출력합니다.
몇 개를 출력할까요?: 5
+-+-+
# +와 -를 번갈아 출력하기 1(for문 수정)

print('+와 -를 번갈아 출력합니다.')
n = int(input('몇 개를 출력할까요?: '))

for i in range(1, n+1):
  if i % 2:
    print('+', end='')
  else:
    print('-', end='')

print()
+와 -를 번갈아 출력합니다.
몇 개를 출력할까요?: 6
+-+-+-

실습 1-13 +와 -를 번갈아 출력하기 2

# +와 -를 번갈아 출력하기 2

print('+와 -를 번갈아 출력합니다.')
n = int(input('몇 개를 출력할까요?: '))

for _ in range(n//2): # 무시하고 싶은 연산자 _ 처리
  print('+-', end='')

if n % 2:
  print('+',end='')

print()
+와 -를 번갈아 출력합니다.
몇 개를 출력할까요?: 12
+-+-+-+-+-+-

반복 과정에서 조건 판단하기 3

실습 1-14 *를 n개 출력하되 w개마다 줄바꿈하기 1

# *를 n개 출력하되 2개마다 줄바꿈하기 1

print('*를 출력합니다.')
n = int(input('몇 개를 출력할까요?: '))
w = int(input('몇 개마다 줄바꿈할까요?: '))

for i in range(n):
  print('*', end='')
  if i % w == w - 1:
    print()
if n % w:
  print()
*를 출력합니다.
몇 개를 출력할까요?: 24
몇 개마다 줄바꿈할까요?: 6
******
******
******
******

실습 1-15 *를 n개 출력하되 w개마다 줄바꿈하기 2

# *를 n개 출력하되 2개마다 줄바꿈하기 2

print('*를 출력합니다.')
n = int(input('몇 개를 출력할까요?: '))
w = int(input('몇 개마다 줄바꿈할까요?: '))

for _ in range(n//w):
  print('*' * w)

rest = n % w
if rest:
  print('*' * rest)
*를 출력합니다.
몇 개를 출력할까요?: 25
몇 개마다 줄바꿈할까요?: 5
*****
*****
*****
*****
*****

양수만 입력받기

실습 1-16 1부터 n까지 정수의 합 구하기(n값은 양수만 입력받음)

# 1부터 n까지 정수의 합 구하기(n 값은 양수만 입력받음)

print('1부터 n까지 정수의 합을 구합니다.')

while True:
  n = int(input('n값을 입력하세요.: '))
  if n > 0:
    break
sum =0
i = 1

for i in range(1, n+1):
  sum += i
  i += 1

print(f'1부터 {n}까지 정수의 합은 {sum}입니다.')
1부터 n까지 정수의 합을 구합니다.
n값을 입력하세요.: 7
1부터 7까지 정수의 합은 28입니다.

직사각형 넓이로 변의 길이 구하기

실습 1-17 가로, 세로 길이가 정수이고 넓이가 area인 직사각형에서 변의 길이 나열하기

# 가로, 세로 길이가 정수이고 넓이가 area인 직사각형에서 변의 길이 나열하기

area = int(input('직사각형의 넓이를 입력하세요.: '))

for i in range(1, area + 1):
  if i * i > area: break
  if area % 1: continue
  print(f'{i} x {area // i}')
직사각형의 넓이를 입력하세요.: 24
1 x 24
2 x 12
3 x 8
4 x 6

while break continue 문의 순서도

실습 1-18 10 ~ 99 사이의 난수 n개 생성하기(13이 나오면 중단)

# 10 ~ 99 사이의 난수 n개 생성하기(13이 나오면 중단)

import random

n = int(input('난수의 개수를 입력하세요.: '))

for _ in range(n):
  r = random.randint(10, 99)
  print(r, end=' ')
  if r == 13:
    print('\n프로그램을 중단합니다.')
    break
else:
  print('\n난수 생성을 종료합니다.')
난수의 개수를 입력하세요.: 43
97 49 65 82 65 31 14 23 52 48 54 61 42 85 22 51 94 23 40 64 15 30 59 32 31 35 37 44 71 30 47 17 92 72 16 53 51 53 60 89 49 90 26 
난수 생성을 종료합니다.

반복문 건너뛰기와 여러 범위 스캔하기

실습 1-19 1 ~ 12까지 8을 건너뛰고 출력하기 1

# 1 ~ 12 까지 8을 건너뛰고 출력하기 1

for i in range(1, 13):
  if i == 8:
    continue
  print(i, end=' ')

print()
1 2 3 4 5 6 7 9 10 11 12

실습 1-20 1 ~ 12까지 8을 건너뛰고 출력하기 2

# 1부터 12까지 8을 건너뛰고 출력하기 2

for i in list(range(1,8)) + list(range(9,13)):
  print(i, end=' ')
print()
1 2 3 4 5 6 7 9 10 11 12

비교 연산자를 연속으로 사용하는 방법과 드모르간의 법칙

실습 1C-3 2자리 양수(10 ~ 99) 입력받기

# 2자리 양수(10~99) 입력받기

print('2자리 양수를 입력하세요.')

while True:
  no = int(input('값을 입력하세요.: '))
  if no >= 10 and no <= 99:
    break

print(f'입력받은 양수는 {no}입니다.')
2자리 양수를 입력하세요.
값을 입력하세요.: 3
값을 입력하세요.: 5
값을 입력하세요.: 100
값을 입력하세요.: 45
입력받은 양수는 45입니다.

비교 연산자를 연속으로 사용한 방법

if 10 <= no <= 99: # no>= 10 and no <=99와 같음

드모르간의 법칙을 사용한 방법

if not(no < 10 or no > 99): # no >= 10 and on <= 99와 같음

드모르간의 법칙?

더보기
더보기

각 조건을 부정하고 논리곱을 논리합으로, 논리합을 논리곱으로 바꾸고 다시 전체를 부정하면 원래의 조건과 같다.


다음 루프 알아보기

실습 1-21 구구단 곱셈표 출력하기

# 구구답 곱셈표 출력하기

print('-' * 27)
for i in range(1,10):
  for j in range(1,10):
    print(f'{i * j:3}', end='') # :3 = 3칸씩 공백
  print()
print('-' * 27)
---------------------------
  1  2  3  4  5  6  7  8  9
  2  4  6  8 10 12 14 16 18
  3  6  9 12 15 18 21 24 27
  4  8 12 16 20 24 28 32 36
  5 10 15 20 25 30 35 40 45
  6 12 18 24 30 36 42 48 54
  7 14 21 28 35 42 49 56 63
  8 16 24 32 40 48 56 64 72
  9 18 27 36 45 54 63 72 81
---------------------------
더보기
더보기

이중 루프 실행

  • i가 1일 때: j를 1 ~ 9까지 1씩 증가시키면서 1 * j를 3자리로 출력하고 줄바꿈
  • i가 2일 때: j를 1 ~ 9까지 1씩 증가시키면서 2 * j를 3자리로 출력하고 줄바꿈
  • i가 3일 때: j를 1 ~ 9까지 1씩 증가시키면서 3 * j를 3자리로 출력하고 줄바꿈

·· 생략 ···)

  • i가 9일 때: j를 1 ~ 9까지 1씩 증가시키면서 9 * j를 3자리로 출력하고 줄바꿈

직각 이등변 삼각형으로 출력하기

실습 1-22 왼쪽 아래가 직각인 이등변 삼각형으로 * 출력하기

# 왼쪽 아래가 직각인 이등변 삼각형으로 * 출력하기

print('왼쪽 아래가 직각인 이등변 삼각형을 출력합니다.')
n = int(input('짧은 변의 길이를 입력하세요.'))

for i in range(n):
  for j in range(i + 1):
    print('*', end='')
  print()
왼쪽 아래가 직각인 이등변 삼각형을 출력합니다.
짧은 변의 길이를 입력하세요.6
*
**
***
****
*****
******
더보기
더보기

이중 루프 실행

  • i가 0일 때: j를 0 ~ 0까지 1씩 증가시키면서 *를 출력하고 줄바꿈 *
  • i가 1일 때: j를 0 ~ 1까지 1씩 증가시키면서 *를 출력하고 줄바꿈 **
  • i가 2일 때: j를 0 ~ 2까지 1씩 증가시키면서 *를 출력하고 줄바꿈 ***
  • i가 3일 때: j를 0 ~ 3까지 1씩 증가시키면서 *를 출력하고 줄바꿈 ****

실습 1-23 오른쪽 아래가 직각인 이등변 삼각형으로 * 출력하기

# 오른쪽 아래가 직각인 이등변 삼각형으로 * 출력하기

print('오른쪽 아래가 직각인 이등변 삼각형을 출력합니다.')
n = int(input('짧은 변의 길이를 입력하세요.: '))

for i in range(n):
  for _ in range(n - i - 1):
    print(' ', end='')
  for _ in range(i + 1):
    print('*', end='')
  print()
오른쪽 아래가 직각인 이등변 삼각형을 출력합니다.
짧은 변의 길이를 입력하세요.: 7
      *
     **
    ***
   ****
  *****
 ******
*******

파이썬의 변수 알아보기

파이썬에서는 데이터, 함수, 클래스, 모듈, 패키지 등을 모두 객체(object)로 취급합니다. 객체는 자료형을 가지며 메모리(저장 공간)을 차지합니다. 파이썬의 이런 특징 때문에 파이썬의 변수는 값을 갖지 않는다는 특징이 있습니다.

  • 변수는 객체를 참조하는 객체에 연결된 이름에 불과합니다.
  • 모든 객체는 메모리를 차지하고, 자료형뿐만 아니라 식별 번호(identity)를 가집니다.

실습 1C-4 함수 내부·외부에서 정의한 변수와 객체의 식별 번호를 출력하기

# 함수 내부·외부에서 정의한 변수와 객체의 식별 번호를 출력하기

n = 1 # 전역변수

def put_id():
  x = 1 # 지역 변수
  print(f'id(x) = {id(x)}')

print(f'id(1) = {id(1)}')
print(f'id(n) = {id(n)}')
put_id()
id(1) = 94905633987072
id(n) = 94905633987072
id(x) = 94905633987072

실습 1C-5 1부터 100까지 반복하여 출력하기

# 1부터 100까지 반복하여 출력하기

for i in range(1, 101):
  print(f'i = {i:3}  id(i) = {id(i)}')
i =   1  id(i) = 94905633987072
i =   2  id(i) = 94905633987104
i =   3  id(i) = 94905633987136
i =   4  id(i) = 94905633987168
i =   5  id(i) = 94905633987200
i =   6  id(i) = 94905633987232
i =   7  id(i) = 94905633987264
i =   8  id(i) = 94905633987296
i =   9  id(i) = 94905633987328
i =  10  id(i) = 94905633987360
i =  11  id(i) = 94905633987392
i =  12  id(i) = 94905633987424
i =  13  id(i) = 94905633987456
i =  14  id(i) = 94905633987488
i =  15  id(i) = 94905633987520
i =  16  id(i) = 94905633987552
i =  17  id(i) = 94905633987584
i =  18  id(i) = 94905633987616
i =  19  id(i) = 94905633987648
i =  20  id(i) = 94905633987680
i =  21  id(i) = 94905633987712
i =  22  id(i) = 94905633987744
i =  23  id(i) = 94905633987776
i =  24  id(i) = 94905633987808
i =  25  id(i) = 94905633987840
i =  26  id(i) = 94905633987872
i =  27  id(i) = 94905633987904
i =  28  id(i) = 94905633987936
i =  29  id(i) = 94905633987968
i =  30  id(i) = 94905633988000
i =  31  id(i) = 94905633988032
i =  32  id(i) = 94905633988064
i =  33  id(i) = 94905633988096
i =  34  id(i) = 94905633988128
i =  35  id(i) = 94905633988160
i =  36  id(i) = 94905633988192
i =  37  id(i) = 94905633988224
i =  38  id(i) = 94905633988256
i =  39  id(i) = 94905633988288
i =  40  id(i) = 94905633988320
i =  41  id(i) = 94905633988352
i =  42  id(i) = 94905633988384
i =  43  id(i) = 94905633988416
i =  44  id(i) = 94905633988448
i =  45  id(i) = 94905633988480
i =  46  id(i) = 94905633988512
i =  47  id(i) = 94905633988544
i =  48  id(i) = 94905633988576
i =  49  id(i) = 94905633988608
i =  50  id(i) = 94905633988640
i =  51  id(i) = 94905633988672
i =  52  id(i) = 94905633988704
i =  53  id(i) = 94905633988736
i =  54  id(i) = 94905633988768
i =  55  id(i) = 94905633988800
i =  56  id(i) = 94905633988832
i =  57  id(i) = 94905633988864
i =  58  id(i) = 94905633988896
i =  59  id(i) = 94905633988928
i =  60  id(i) = 94905633988960
i =  61  id(i) = 94905633988992
i =  62  id(i) = 94905633989024
i =  63  id(i) = 94905633989056
i =  64  id(i) = 94905633989088
i =  65  id(i) = 94905633989120
i =  66  id(i) = 94905633989152
i =  67  id(i) = 94905633989184
i =  68  id(i) = 94905633989216
i =  69  id(i) = 94905633989248
i =  70  id(i) = 94905633989280
i =  71  id(i) = 94905633989312
i =  72  id(i) = 94905633989344
i =  73  id(i) = 94905633989376
i =  74  id(i) = 94905633989408
i =  75  id(i) = 94905633989440
i =  76  id(i) = 94905633989472
i =  77  id(i) = 94905633989504
i =  78  id(i) = 94905633989536
i =  79  id(i) = 94905633989568
i =  80  id(i) = 94905633989600
i =  81  id(i) = 94905633989632
i =  82  id(i) = 94905633989664
i =  83  id(i) = 94905633989696
i =  84  id(i) = 94905633989728
i =  85  id(i) = 94905633989760
i =  86  id(i) = 94905633989792
i =  87  id(i) = 94905633989824
i =  88  id(i) = 94905633989856
i =  89  id(i) = 94905633989888
i =  90  id(i) = 94905633989920
i =  91  id(i) = 94905633989952
i =  92  id(i) = 94905633989984
i =  93  id(i) = 94905633990016
i =  94  id(i) = 94905633990048
i =  95  id(i) = 94905633990080
i =  96  id(i) = 94905633990112
i =  97  id(i) = 94905633990144
i =  98  id(i) = 94905633990176
i =  99  id(i) = 94905633990208
i = 100  id(i) = 94905633990240

- 출처: Do it! 자료구조와 함께 배우는 알고리즘 입문 - 파이썬 편
- notebook ipynb file: https://github.com/heejvely/Algorithm/blob/main/Do_it_algorithm/Do_it_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98_%EA%B8%B0%EC%B4%88_1.ipynb

 

GitHub - heejvely/Algorithm: 파이썬 알고리즘 인터뷰 책을 참고한 파이썬 알고리즘 연습

파이썬 알고리즘 인터뷰 책을 참고한 파이썬 알고리즘 연습. Contribute to heejvely/Algorithm development by creating an account on GitHub.

github.com

 

728x90