이 글은 골든래빗 코딩 테스트 합격자 되기 파이썬 편의 5장 써머리입니다.
배열
배열과 차원
배열은 차원과 무관하게 메모리에 연속할당된다.
- 배열의 효율성
데이터에 접근하기 위한 시간 복잡도는 O(1).
맨뒤에 삽입 O(1)
맨앞에 삽입 O(N)
중간에 삽입 O(N)
- 배열 선택시 고려사항
할당가능한 메모리 크기 확인
중간에 데이터 삽입이 많은지 확인
- 리스트 기법
append() : 맨끝에 데이터 추가 ( +연산자로도 데이터 추가 가능)
insert() : 특정위치의 데이터 삽입
pop() : 특정위치의 데이터 삭제
remove() : 특정 데이터 자체를 삭제하는 함수
len() : 데이터 개수
index() : 인덱스를 반환, 없으면 -1 반환
sort() : 정렬
count() : 특정데이터 개수
1. 배열 정렬
sort 함수 & sorted 함수
- sort와 sorted 함수 차이** iterable : list, dict, set, str, bytes, tuple, range
- sort는 리스트형의 메서드로 원본을 수정해서 반환. list에서만 사용 가능. 메모리 사용을 최소화 하고 싶을 때 효과적. sorted는 내장 함수로 원본은 그대로 정렬된 새 리스트(list 효과)를 반환. 다른 iterable에도 사용하고 싶을 때
def solution(arr) :
return sort(list((arr)))
def solution(arr) :
return sorted((arr))
#sorted 내장함수는 정렬된 새 리스트를 반환하기에 list를 사용x.
2. 배열 중복 제거 & 정렬
set 함수
- 중복 제거 : 중복을 제거하는데 효과적.집합 연산 : 합집합, 교집합 같은 집합 연산에 자주 사용.
- 따라서 sort함수를 사용할 경우, set함수로 중복을 제거 후, 순서가 있는 list를 사용 하여 sort함수로 정렬함.
- 순서 없음 : 순서가 중요하지 않을 때 사용.
- set함수는 반복 가능하고, 가변적이며, 중복 요소가 없지만 정렬되어 있지 않은 컬렉션 데이터 타입이다.
핵심 : 파이썬엔 코딩테스트에 유용한 함수가 많으므로 직접 작성하려 하지마라.
def solution(arr) :
return sorted(set(arr), reverse = True)
#sorted 내장함수는 정렬된 새 리스트를 반환하기에 list를 사용x 가능.
def solution(arr) :
return sort(list(set(arr)), reverse = True)
3. 두 개 뽑아서 더하기
#A.
def solution (numbers):
ans = []
for i in range(len(numbers)):
for j in ranger(i+1, len(numbers)): #서로 다른 두 수
ans.append(numbers[i]+ number[j])
return sorted(set(ans))
#B.
def solution (numbers):
sorted(numbers)
ans = []
for i in range(len(numbers)):
for j in ranger(i+1, len(numbers)):
ans.append(numbers[i]+ number[j])
return list(set(ans))
(프로그래머스 문제)
4. 모의고사
def solution(answers):
answer = [] # 정답 배열
s1 = [1, 2, 3, 4, 5]
s2 = [2, 1, 2, 3, 2, 4, 2, 5]
s3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
count = [0, 0, 0] #문제수 저장
for i in range(len(answers)): # 각 수포자의 답안 패턴을 반복하여 현재 문제와 비교
if s1[i % len(s1)] == answers[i]:
count[0] += 1
if s2[i % len(s2)] == answers[i]:
count[1] += 1
if s3[i % len(s3)] == answers[i]:
count[2] += 1
maxScore = max(count)
for i in range(len(count)):
if count[i] == maxScore:
answer.append(i + 1) #수포자 번호 1부터 시작
return answer
enumerate 내장함수로 더 쉽고, 간단하게 짜는 법이 있었다. 이번 챕터 책의 의도가 파이썬의 내장함수를 사용하자 인데, 그러지 못한 부분이 매우 아쉬움.. 문제를 풀면서 항상 좀 더 효율적인 쪽을 고민해 봐야할듯.
- enumerate 활용
- enumerate 함수는 순서가 있는 자료형을 입력받아, 인덱스와 값을 포함하는 enumerate 객체를 반환.
- 인덱스와 값에 쉽게 접근 가능.
** n차원 리스트나 튜플 루프에서 더욱 유용하게 사용.
def solution(answers):
s = [[1, 2, 3, 4, 5], [2, 1, 2, 3, 2, 4, 2, 5], [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
counts = [0, 0, 0]
for i, answer in enumerate(answers):
for j, sn in enumerate(s):
if answer == sn[i % len(sn)]:
counts[j] += 1
max_score = max(counts)
high_scores = [i + 1 for i, count in enumerate(counts) if count == max_score]
return high_scores
5. 행렬의 곱셈
def solution(arr1, arr2):
answer = []
# 행렬 곱셈 수행
for i in range(len(arr1)):
row = []
for j in range(len(arr2[0])):
# 각 원소의 곱셈 결과 계산
element = sum(arr1[i][k] * arr2[k][j] for k in range(len(arr1[0])))
row.append(element)
answer.append(row)
return answer
6. 실패율
def solution(N, stages):
answer = []
# 각 스테이지의 실패율을 계산하여 리스트에 저장
fail_rates = []
total_users = len(stages)
for stage in range(1, N+1):
# 현재 스테이지에 도달한 사용자 수
cur_users = stages.count(stage)
# 실패율 계산
if total_users == 0:
fail_rate = 0
else:
fail_rate = cur_users / total_users
# 실패율과 스테이지 번호 저장
fail_rates.append((stage, fail_rate))
# 해당 스테이지까지 도달한 사용자 수 갱신
total_users -= cur_users
fail_rates.sort(key=lambda x: x[1], reverse=True)
answer = [stage for stage, _ in fail_rates]
return answer
7. 방문 길이
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(dirs):
visited = set() # 방문한 좌표를 저장할 집합
current = (0, 0) # 현재 위치
answer = 0
for move in dirs:
x, y = current
# 다음 위치 계산
if move == 'U':
next_pos = (x, y + 1)
elif move == 'D':
next_pos = (x, y - 1)
elif move == 'R':
next_pos = (x + 1, y)
elif move == 'L':
next_pos = (x - 1, y)
# 처음 방문 길
if -5 <= next_pos[0] <= 5 and -5 <= next_pos[1] <= 5 and (current, next_pos) not in visited:
visited.add((current, next_pos))
visited.add((next_pos, current)) # 양방향으로 저장
answer += 1
# 다음 위치를 현재 위치로
current = next_pos
return answer
'Study' 카테고리의 다른 글
[묘공단]파이썬 스터디 5주차 (1) | 2023.12.22 |
---|---|
[묘공단]파이썬 스터디 4주차 (0) | 2023.12.15 |
[묘공단]파이썬 스터디 1주차 (1) | 2023.11.24 |
크롬 드라이버 118 버전 다운(115 이상) (0) | 2023.11.13 |
[Python] 노마드코더 2주 챌린지 신청 (0) | 2023.11.09 |