새소식

Algorithm/파이썬 알고리즘 문제풀이 강의

1. 파이썬 기초 문법

  • -

1. 변수와 출력함수

 

◆<변수명 정하기>

1) 영문과 숫자, _로 이루어진다.

2) 대소문자를 구분한다

3) 문자나,_로 시작한다

: 숫자로 시작하면 에러

4) 특수문자를 사용하면 안된다 (%,&등)

5) 키워드를 사용하면 안된다 (if,for등)

  • 한꺼번에 변수를 여러개 선언하고, 값을 넣을 수 있다.

 

  • 값 교환

◆<변수 타입>

◆<출력 방식>

◆seperate(구분해서 출력)

 

sep = '★'

: ★자리에 변수 사이에 구분하고 싶은 값 넣으면, 출력 시 구분된다

: ', ' 쉼표 뒤에 띄어쓰기 해도 반영된다.

sep = '\n' -> 줄바꿈 해서 출력됨

print시, 변수들을 묶어서가 아니라 각각 출력해도, 줄바꿈 출력된다 (print에는 기본적으로 줄바꿈이 내장되어 있dma)

  • print에는 기본적으로 줄바꿈이 내장되어 있다.

print하고 줄바꿈 하기 싫다면? -> sep = ' ' 이용!

2. 변수 입력과 연산자

◆ 변수입력과 연산자 (input함수)

a=input("숫자를 입력하세요:")

: input함수를 통해, 키보드 입력을 불러올 수 있다.

  • split()함수

키보드 입력 시, 두 변수에 대응되는 값을 입력할 때, 띄어쓰기하여 입력하면 그대로 대입되어 출력된다.

  • 키보드 입력으로 받은 값들은 string형이다.

: 대응되는 값으로 숫자로 입력해도, string형이다.

위에서 a와 b에 숫자 2,3,을 대입후,

print(a+b)출력하면 5가 아니라, 연이은 23이 출력된다

: a = int(a)

b = int(b)로 형변환 한 후, print(a+b)출력하면 5가 출력된다.

◆ map함수

: 위처럼 형변환 하기 귀찮을 땐 map함수 이용한다.

input으로 입력받은 숫자들이 a와b에 string형으로 대입되는데, int로 형변환돼서 맵핑된다.

3.반복문

for,while,break,continue

◆ for문

  • range() : 순차적으로 정수리스트를 만든다.

 

a=range(10)
print(list(a))
//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

  • for i in range(1,11) vs for i in range(10,0)

 

for i in range(1,11) >> 1,2,...10 출력

for i in range(10,0) >> 아무일도 일어나지 않는다.

-> -1이라는 감소 인자를 추가해줘야 함!

for i in range(10,0,-1) >> 10,9,8,7,...1 출력

 

◆◆ while문

i = 1
while i<=10:
	print(i)
	i=i+1

◆ break

: 반복문을 멈추고 싶을 때, 쓴다.

i=1
while i<=10:
	print(i)
	if i==5:
		break
	i+=1

continue

: 뭐를 건너뛰고 싶다.

ex) 짝수를 건너뛰고, 홀수만 출력하고 싶다.

for i in range(1,11):
	if i%2==0:
		continue //continue를 만나면,더 이상 코드 탐색을 멈추고, 다시 for문으로 올라간다.
	print(i)

-> continue문 아래는 건너 뛴다.

for ~ else문

: 정상적으로 for문이 종료되었을 경우에만, else도 데려간다.

for i in range(1,11):
	print(i)
	if i==5:
		break
else:
	print(11)

->break에 의해, 비정상적으로 for문이 중단되었다. 그 아래의 else문에 있는 print(11)은 출력되지 않는다.

 

 

 
for i in range(1,11):
	print(i)
	if i>15:
		break
else:
	print(11)

if~break조건에 걸리지 않아서, 정상적으로 for문이 종료되었다. 그 땐 else문에 있는 print(11)도 출력된다.

4. 중첩 반복문(2중 for문)

for i in range(5)://i=0에서 시작
	for j in range(5):
		print("*", end= ' ')
	print() //공백  출력 -> j를 0,1,2,3,4 다 돌면,줄바꿈 후,다시 i=1부터 탐색한다

-> 이런식으로, 이중 for문을 통해 행렬을 만들 수 있다.

#만약, 이런 모양 만들고 싶다면??

 

 

for i in range(5):
	for j in range(i+1): //0,0 1 , 0 1 2 , .. 이렇게 하나씩 늘어나면서 탐색
		print("*",end=' ') 
	print()

#만약, 이런 모양 만들고 싶다면??

 
for i in range(5):
	for j in range(5-i):
		print("*",end= ' ')
	print()

5. 문자열과 내장함수

 

  • upper()

:문자를 모두 대문자화 시키는 함수

  • lower()

:문자를 모두 소문자화 시키는 함수

문자열도 다 인덱스 번호가 있다.

  • find('T') : 출현하는 T 중, 가장 앞에 있는 인덱스 번호 출력

  • count('T') : T가 출연하는 갯수 출력
  • 문자열 슬라이싱

string[:2] : 0번째,1번째 인덱스 까지만 출력

  • len : 공백 포함해서 문자열 길이 출력

string[3:5] : 3,4번째 인덱스 까지만 출력


◆ for문으로 문자열 다루기

1) msg="It is Time" for i in range(len(msg)): print(msg[i],end=' ')

I t i s T i m e 출력

2) for x in msg: print(x,end=' ')

I t i s T i m e 출력

-> x가 문자 한개한개에 접근한다 (공백 포함)

  • isupper() / islower()

: 탐색한 문자가 대문자인지 소문자인지 판별

 

  • isalpha()

: 탐색한 문자가 알파벳인지 아닌지 판별 (해당 인덱스에서 공백이면 false)

  • ord(x)

: 탐색한 값이 들어가는 변수 x에 대해, x의 아스키넘버 값을 출력해주는 함수

 

(출력 결과)

65 ->A의 아스키넘버

90 -> Z의 아스키넘버

  • chr(아스키넘버)

:아스키넘버에 대응되는 문자를 출력해주는 함수

->B출력

6. 리스트와 내장함수(1)

◆ 빈 리스트 출력하기

◆리스트 내장함수

  • append(값)

인자로 들어가는 값을, 리스트 뒤에 요소로 추가

  • insert(인덱스번호,값)

: 인덱스번호 자리에, 값을 넣기

  • pop()

: 맨 뒤 인덱스에 있는 값 삭제

  • pop(인덱스 번호)

: 해당 인덱스 번호에 있는 값 삭제

  • remove(값)

: 인자로 들어간 값이 있으면, 삭제

  • index(값)

: 해당 값이 들어가있는 인덱스 번호를 출력

  • sum(리스트 이름)

: 리스트에 있는 요소들의 값을 다 더한다.

  • max(리스트 이름) / min(리스트이름)

: 리스트에 있는 요소들 중, 가장 큰 값 or 작은 값을 출력한다.

  • 무작위함수
import random as r //random모듈을 r로 해라

단, 위를 포함시켜야, 무작위 함수를 사용할 수 있다.

r.shuffle(리스트이름)

print(a)

=> 랜덤으로, 리스트 요소들이 섞여서 출력됨

  • 오름차순 함수

:리스트이름.sort()

  • 내림차순 함수

: 리스트이름.sort(reverse==True)

  • clear()

: 리스트에 있는 요소들이 다 사라짐 -> 빈리스트만 남는다.

7. 리스트와 내장함수(2)

◆ for문으로 리스트 다루기

: 위에서, for문으로 문자열 다룬 것과 마찬가지로 다룰 수 있다.

◆ enumerate(리스트 이름)

: 리스트를 튜플 형태로 출력하는 함수.

(리스트 인덱스,인덱스 값) 출력

  • 튜플

-리스트와 비슷한데, 소괄호로 묶는다.

b = (1,2,3,4,5)

-리스트와 차이점

: 튜플의 값은 절대로 변경이 불가능하다.

b[0] = 7 이런 코드에서 에러가 난다.

둘 다 위처럼 출력.

  • all 함수

 

a라는 리스트의 원소들을 하나씩 탐색해서, x로 두고, 그 x가 모두 60>x라는 조건을 만족하는지 본다.

원소들이 모두 조건을 만족할 때만, 참

  • any 함수

원소 중 한개라도 조건 만족하면 참.

8. 2차원 리스트 생성과 접근

◆ 1차원 리스트 생성

a = [0]*3 print(a)

[0,0,0] 출력

◆ 2차원 리스트 생성

a=[[0]*3 for _ in range(3)] print(a)

[0,0,0], [0,0,0],[0,0,0]

--> 1행, 2행,3행 의미

a[1][1] = 2 -> 가운데 정사각형이 2로 변경

  • for x in a:
for x in a: // x는 각각, a라는 2차원 리스트에서 1행,2행,3행 의미 print(x) // 1~3행이 줄바꿈 해서 출력됨
  • for x in a:

for y in x:

for x in a: // 1행,2행,3행 for y in x: //각각 행의 하나하나 원소에 접근 print(y,end=' ') print()

0 1 0

0 0 0

0 0 0 출력

9.함수 만들기

◆함수 만들기

 

def add(a,b): // 두 개의 숫자를 받아서, 그것의 합을 호출해주는 함수 c=a+b print(c)

add(3,2)

->5출력

◆ 소수 출력하는 프로그램

def isPrime(x): for i in range(2,x): //i는 2부터 시작해서, 2,3,4...x까지 탐색 if x%i==0: // 한번이라도, x가 i로 나누어떨어지면 return False //False출력-> 종료 return True // 한 번도, 나누어 떨어지지 않고 for문 빠져나와야 True출력

-->

a=[12,13,7,9,19] for y in a: if isPrime(y): print(y,end=' ')

10. 람다함수

plus_two=lambda x: x+2 print(plus_two(1)) // 3출력

  • map함수

map(함수명,자료)

-> '자료'에다가 '함수'를 작동시킨다

def plus_one(x): return x+1 a=[1,2,3] print(list(map(print_one,a))) //a라는 리스트 자료형에, plus_one함수 적용하고 // 그것을 리스트 형태로 출력 //[2,3,4]출력

-> '람다함수'를 이용하면 위 코드를 더 간단하게 출력 가능

a=[1,2,3] print(list(map(lambda x:x+1,a))) //[2,3,4]출력

-> map이라는 함수의 인자로 람다함수를 바로 적용

** 이렇게, 익명의 표현식,함수를 어떤 내장함수의 인자로 활용할 때, 편리

주로, sort함수에서 lambda함수 많이 사용함

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.