Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 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 |
Tags
- SQL #프로그래머스 #조건절 #ISNULL
- 스택
- 파이선
- 고득점키트
- SQL고득점키트
- 코테
- 카카오코테
- 기초
- SQL #프로그래머스 #SELECT
- 방문길이
- 분할정복
- 2단계
- level2
- 공식문서
- SQL
- SQL #프로그래머스 #MAX #MIN
- 파이썬 #프로그래머스 #코딩테스트
- 행렬곱셈
- groupby
- 프로그래머스
- 고득점kit
- 코딩테스트
- 해시
- 골든래빗
- Join
- H-인덱스
- 파이썬
- 재귀
- Python
- h-index
Archives
- Today
- Total
영아일지
[코딩테스트 이론] 배열 본문
※ 코딩테스트 합격자 되기 - 파이썬 편 (골든 래빗) 교재 참조
배열
: 인덱스와 값을 일대일 대응해 관리하는 자료구조
- 배열 선언
- 일반적인 방법
arr = [0, 0, 0]
,arr = [0]*6
- 리스트 생성자 사용방법
`arr = list(range(6)) # [0,1,2,3,4,5] - 리스트 컴프리헨션 활용
arr = [0 for _ in range(6)]
- 일반적인 방법
- 차원
- 1차원 배열 : 가장 간단한 리스트 배열 방법
`arr = [1,2,3,4] - 2차원 배열 : 1차원 배열 확장
arr = [[1,2],[3,4]]
- 1,2차원 이상의 여러가지 차원도 있음
- 1차원 배열 : 가장 간단한 리스트 배열 방법
배열 기법
: 배열은 임의 접근이라는 방법으로 배열의 모든 위치에 있는 데이터에 단 한 번에 접근 할 수 있음
시간 복잡도 O(1)
- 자주 활용하는 리스트 기법
- 데이터 추가
- 리스트.append(값)
- 리스트.insert(원하는 인덱스 위치, 값)
- 데이터 삭제
- 리스트.pop(원하는 인덱스 위치) : 삭제한 데이터의 값을 반환
- 리스트.remove(삭제 값) : 특정 데이터 자체를 삭제
- 데이터 추가
- 참고
- len() : 리스트 전체 데이터 개수 반환
- index() : 특정 데이터가 처음 등장한 인덱스를 반환 , 없으면 -1반환
- sort() : 사용자가 정한 기준에 따라 리스트 데이터를 정렬, 원본 자체 데이터를 바꿈
- count() : 특정 데이터 개수 반환
문제1
[행렬 곱셈]
https://school.programmers.co.kr/learn/courses/30/lessons/12949
** 나의 풀이법 (시간복잡도 O(N^3))
1) 길이 지정 후, answer 이라는 0 배열 만들기
2) arr1와 arr2 곱하기 위한 반복문 수행
def solution(arr1, arr2):
a1 = len(arr1)
a2 = len(arr1[0])
b2 = len(arr2[0])
answer = [[0]*b2 for _ in range(a1)]
for i in range(a1):
for j in range(b2):
sm = 0
for k in range(a2):
sm += arr1[i][k]*arr2[k][j]
answer[i][j] = sm
return answer
문제2
[행렬 곱셈]
https://school.programmers.co.kr/learn/courses/30/lessons/49994
**나의 풀이법
1) 좌표 시작 위치 재 선정 -> 0,0에서 5, 5로 가정하고 아래, 오른쪽에 0인 배열으로 패딩했다고 가정
2) 중복되는 방향을 제거 해야함으로 set을 통해 add
- 이때, 방향 (이전 위치, 이후 위치) 모두 넣어야함!
3) 갯수세기/2
def solution(dirs):
ans = set()
dr = {'U': (-1, 0), 'D': (1, 0), 'R': (0, 1), 'L': (0, -1)}
i, j = 5, 5
for d in dirs:
ni, nj = i + dr[d][0], j + dr[d][1]
if 0 <= ni < 11 and 0 <= nj < 11:
ans.add((i,j, ni,nj))
ans.add((ni, nj, i, j))
i, j = ni, nj
return len(set(ans))/2
'디지털' 카테고리의 다른 글
[코딩테스트 이론] 트리 (0) | 2024.02.18 |
---|---|
[코딩테스트 이론] 해시 (1) | 2024.01.30 |
[코딩테스트 이론] 스택/큐 (1) | 2024.01.23 |
[코딩테스트 이론] 시간복잡도/파이썬 필수 문법 (0) | 2024.01.15 |