본문 바로가기

프로그래밍/Python

[SWEA] 파이썬 SW문제해결 기본 - List1

728x90
반응형
SMALL

알고리즘이란

 - 유한한 단계를 통해 문제를 해결하기 위한 절차나 방법

슈도코드 : 일반적인 언어로 코드를 흉내내어 알고리즘을 써 놓은 코드 (실행 불가)

순서도 : 프로그램이나 작업의 진행 흐름을 순서에 따라 여러가지 시호나 문자로 나타낸 도표

 

성능 <- 무엇이 좋은 알고리즘인지를 평가하는 척도

  • 정확성 : 정확한가
  • 작업량 : 적은 연산으로 원하는 결과를 얻어내는가
  • 메모리 사용량 : 얼마나 적은 메모리 사용하는가
  • 단순성 : 얼마나 단순한가
  • 최적성  : 더 이상 개선할 여지 없이 최적화되어있는가

시간복잡도(빅오 표기법) + 실행 되는 명령문의 개수 계산 등등 또한 포함된다.

 

 

파이썬 자료형

  • tuple = (), 순서 O, 중복 O, 데이터 변경 X
  • list = [], 순서 O, 중복 O, 데이터 변경 O
  • dictionary = {} 순서 X, (키 중복X 값 중복 O), 데이터 변경 O
  • set = {} 순서 X, 중복 X, 데이터 변경 O

리스트 함축 (LIst Comprehension)

 - 수학에서 집합을 정의하는 표현식과 유사함

 

 

완전검색 방법 => (Brute-force)

 - 모든 경우의 수를 테스트 하고 최종 해법을 도출하기 때문에 속도는 느리지만 해답을 찾지 못할 경우가 적음

 - Permutation : 순열로 서로다른 몇개를 뽑아서 한 줄로 나열한 것

 

 

탐욕 알고리즘 => Greedy

 - 여러 경우중 하나를 선택할 때 마다 그 순간에 최선이라고 생각하는 것을 지속적으로 선택하는 방식

 

 

정렬

  • 버블 정렬
  • 카운팅 정렬
  • 선택 정렬
  • 퀵 정렬
  • 삽입 정렬

등등이 있음 [관련 내용들을 정리할때마다 추가할 예정]

 

 

 

6차시 1일차 - min max (해답코드)

 - 본인은 정렬을 사용하여 문제 해결

 

N = int(input())
answer = []
for _ in range(N):
    n = int(input())
    li = list(map(int, input().split()))
    li.sort()
    answer.append((li[len(li)-1] - li[0]))
    
for i in range(len(answer)):
    print("#",i+1, sep = "", end = " ")
    print(answer[i])

 

7차시 1일차 - 전기버스 (해답코드)

 

T = int(input())
t = 1

while T-t >= 0:
    K, N, M = map(int, input().split())
    bus = [0 for _ in range(N+1)]
    m = list(map(int, input().split()))
    for i in m:
        bus[i] = 1

    now = 0 
    nowK = 0 + K
    cnt = 0

    while nowK < N:
        if now == nowK:
            cnt = 0
            break
        if bus[nowK] == 1:
            now = nowK
            nowK = now + K
            cnt += 1
        elif bus[nowK] == 0:
            nowK -= 1

    print("#"+str(t), cnt)
    t += 1

8차시 1일차 - 숫자카드 (해답코드)

N = int(input())
answer = [0] * 10
pr = []
for _ in range(N):
    n = input()
    s1 = input()
    for i in s1:
        answer[int(i)] += 1
    index = 0
    max = 0
    for i in range(len(answer)):
        if(max <= answer[i]):
            index = i
            max = answer[i]
            
    pr.append([index, max])
    answer = [0] * 10
    
for i in range(len(pr)):
    print("#",i+1, sep = "", end = " ")
    print(pr[i][0], pr[i][1], sep=" ")

9차시 1일차 - 구간합 (해답코드)

TC=int(input())
answer = []
for i in range(1,TC+1):
    N,M=map(int,input().split())
    arr=list(map(int,input().split()))
    arr_list = []
    
    for i in range(N-M+1):
        su = 0
        for j in range(i,i+M):
            su += arr[j]
        arr_list.append(su)
    answer.append(max(arr_list) - min(arr_list))
for i in range(len(answer)):
    print("#",i+1, sep = "", end = " ")
    print(answer[i])

 

 

[해당 블로그 글은 *SW Expert Academy* 에서 Course -> programming Intermediate에 있는 강의와 문제를 보고 정리 밑 문제풀이 한것으로 해당 문제 나 강의를 보기 위해서는 https://swexpertacademy.com 로 방문하여 회원가입 후 보실 수 있습니다.]

728x90
반응형
LIST