목록파이썬 (8)
Seung's Learning Record
≣ 목차 PEP8 스타일 PEP 8 PEP8 : 파이썬 개선 제안서, 파이썬 코드를 어떻게 구상할 지 알려주는 스타일 가이드 PEP8 전체 가이드 다른 사람과 원활하게 협업하려면 공통된 스타일 공유가 필요 일관성 있는 스타일은 나중에 수정하기도 쉽다. whitespace 한 줄의 문자 길이가 79자 이하여야 한다. 함수와 클래스는 빈 줄 두개로 구분한다. 클래스에서 메서드는 빈 줄 하나로 구분한다. 변수 할당 앞 뒤에 스페이스를 하나만 사용한다. 리스트 인덱스, 함수 홏ㄹ, 키워드 인수 할당에는 스페이스를 사용하지 않는다. naming 함수, 변수, 속성 : lowercase_underscore 보호(protected) 인스턴스 속성 : _leading_underscore 비공개(private) 인스턴스..
≣ 목차 리스트 파이썬에는 다른 언어들에서 다뤄지는 배열과 유사한 성질의 리스트(list)라는 자료구조가 존재한다. 동일한 자료형만 가질 수 있는 배열과는 달리, 리스트는 다양한 자료형을 하나의 리스트 안에 담을 수 있다. 선언 방법 a = [1,2,'a','b',"xyz"] b = [] c = list() d = [0]*10 #[0,0,0,0,0,0,0,0,0,0] e = [i*2 for i in range(5)] #[0,2,4,6,8] 리스트는 위와 같은 다양한 방법을 통해 선언이 가능하다. 연산 a = [1,2,3] b = ['a','b','c'] c = a+b #[1,2,3,'a','b','c'] d = a*3 #[1,2,3,1,2,3,1,2,3] e = a*0 #[] 이처럼 리스트 사이의 덧셈이..
≣ 목차 해시(Hash) 해시 개념 해시란 해시 테이블에 Key와 Value를 매핑해서 데이터를 저장하는 자료구조이다. 주로 데이터 탐색, 삽입, 집계등의 연산을 할때 유용하며, 인덱스 값이 숫자가 아닌 문자열이나 튜플을 때도 유용하다. 하지만 최댓값과 최솟값을 찾는 문제는 자료구조 전체를 탐색해야 하기 때문에 효율성이 떨어진다는 단점이 있다. 해시 (Hash) : 임의 값을 고정 길이로 변환하는 것 해시 테이블 (Hash Table) : 키 값의 연산에 의해 직접 접근이 가능한 데이터 구조 해싱 함수 (Hashing Function) : Key에 대해 산술 연산을 이용해 데이터 위치를 찾을 수 있는 함수 해시 값 (Hash Value) 또는 해시 주소 (Hash Address) : Key를 해싱 함수로..
≣ 목차 알고리즘 시간 복잡도 알고리즘을 풀때는 제한 시간내에 코드가 실행 완료되는것이 중요하다. 이를 위해 우리는 알고리즘의 시간복잡도와 공간 복잡도가 어떠한가를 미리 파악한 후 이에 맞는 문제 풀이 방법을 생각해내야 한다.이러한 복잡도를 표현하는 방법 중 가장 흔히 사용되는 방법은 빅오 표기법(big-O notation)이다. 이에 관한 설명은 아래 링크에 자세히 작성되어 있다. https://seung2344.tistory.com/22 리스트 파이썬에는 다른 언어들에서 다뤄지는 배열과 유사한 성질의 리스트(list)라는 자료구조가 존재한다. 동일한 자료형만 가질 수 있는 배열과는 달리, 리스트는 다양한 자료형을 하나의 리스트 안에 담을 수 있다. 선언 방법 a = [1,2,'a','b',"xyz"]..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/djMyEi/btsFKN0ssDY/kXvkgRwLp2kZVCkWDJWKq1/img.png)
난이도 : 실버2 소요시간 : 27m 사용한 풀이법 : DP 풀이 과정 입력받은 문자열을 정수형 리스트 arr[]로 변환 dp[]에는 해당 인덱스에서 가질 수 있는 최대값을 넣는다 dp[i-1]+arr[i]가 음수일 경우 최대값 생성에 방해가 되므로 해당 dp값은 0으로 초기화 원래는 여기서 풀이를 끝낼라했는데 모두 음수일 경우를 고려안하게 생각나서 dp첫번째 조건문 뒤에 arr값을 dp값으로 초기화 해주는 코드 추가 ⇒ 내가 생각해도 좀 후진 코드..ㅎ 원래는 max(dp)를 하려했으나 위 코드 추가되면서 max(arr)로 변경 다른 풀이 입력받은 문자열을 정수형 리스트 arr[]로 변환 현재합과 최대합 연산용 변수 선언 arr을 돌면서 해당 인덱스와 해당 인덱스에 현재합을 더한 것중 max를 현재합에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tFWPf/btsFDV6Cn72/vnlf3ztkhMsMpcX0nZi3WK/img.png)
난이도 : 실버2 소요시간 : 48m 사용한 풀이법 : DP 풀이 과정 dp용 리스트 선언 각 인덱스에는 1로만 표현했을경우의 개수를 넣는다. 즉, 인덱스 번호를 그대로 대입! 루프를 돌면서 DP탐색 시작 인덱스 번호보다 작은 제곱 수 중에서 가장 큰 값을 찾는다. 현재 인덱스 번호에서 해당 제곱 수를 뺀 인덱스 번호에 +1을 한 후, 대소비교를 진행한다. ex) dp[10] = dp[10-33]+1 = dp[1]+1 (11 + 3*3, 2개!) +1을 하는 이유는 앞선 dp[]값에 제곱 수의 경우가 하나 추가되는 것이기 때문 작성 코드 import math N = int(input()) dp = [x for x in range(N+1)] for i in range(1, N + 1): for j in r..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b6KTgh/btsFC2Zco9X/ZQkaqE2JCNfTftg5SOzEkK/img.png)
난이도 : 실버3 소요시간 : 31m 사용한 풀이법 : DP 풀이 과정 dp용 리스트 선언 후 0으로 초기화 dp 리스트는 인덱스 숫자가 1이 되기까지의 최소연산횟수를 저장하는 용도 2~n+1까지 루프 실행 dp[i] = dp[i-1]+1 : i번째 수는 i-1번째 수의 dp값에 +1을 한것을 디폴트로 둔다 만일 i가 2나 3으로 나누어 떨어진다면, i에 2를 나눈 몫의 수에 해당하는 dp값과 디폴트값을 비교하여 최소값을 선택한다 작성 코드 n=int(input()) dp = [0]*(n+1) for i in range(2,n+1): dp[i] = dp[i-1]+1 if i%2 == 0 : dp[i] = min(dp[i],dp[i//2]+1) if i%3 == 0: dp[i] = min(dp[i],dp[..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cdno59/btsFm3cDekR/qmi7rfQSDL8cB3k4DyEpZ0/img.png)
난이도 : 실버1 소요시간 : 1h 17m 사용한 풀이법 : DP 풀이 과정 풀이과정(백트래킹) 각 요소[i][j]는 대해서 [i+1][j],[i+1][j+1]만 더할 수 있음 해당 위치에서 이동가능한 경로를 인자로 해서 함수 재귀 진행 인자가 n과 같아지면 결과갑 리스트에 삽입 모든 경우의 수 탐색 후 리스트의 max를 출력하면 정답!! 이긴 한데 메모리 초과 뜸 풀이과정(DP) 위에꺼에서 아래꺼를 더하는 방식이 아닌 아래꺼에서 위에 값을 참조해오는 것으로 변경 =>메모리 손실 방지 참조 방식은 총 3가지 행의 첫번째 인자일 경우, 바로 위 행의 첫번째 인자값에 더하면 됨 ([i-1][0]) 행의 마지막 인자일 경우, 바로 위 행의 마지막 인자값에 더하면 됨 ([i-1][-1]) 행의 중간일 경우, 바..