해시
1. Lv 2 - 나머지 한 점
import collections
def solution(v):
coord = {'x': [i[0] for i in v], 'y': [j[1] for j in v]}
answer = []
for value in coord:
my_counter = collections.Counter(coord[value])
my_counter = sorted(my_counter.items(), key=lambda x: x[1])
answer.append(my_counter[0][0])
return answer
- 딕셔너리 자료구조는
for key, value in coord.items()
또는for axis, coordinates in coord.items()
와 같이 표기하기
2. Lv 2 - 운송 트럭
def solution(max_weight, specs, names):
answer = 1
specs = dict(specs)
weight = 0
for name in names:
weight += int(specs[name])
if weight > max_weight:
answer += 1
weight = int(specs[name])
return answer
3. Lv 3 - 빙고
def solution(board, nums):
answer = 0
N = len(board)
# 빙고 내에 nums의 숫자가 있으면 0으로 변경
for i in range(N):
for j in range(N):
for num in nums:
if board[i][j] == num:
board[i][j] = 0
right_down = 0
left_down = 0
# 우하향, 좌하향(대각선)으로 원소합이 0이라면 빙고 개수 +1
for k in range(N):
right_down += board[k][k]
if right_down == 0:
answer += 1
for k in range(N):
left_down += board[k][N - k - 1]
if left_down == 0:
answer += 1
# 가로, 세로의 원소합이 0이라면 빙고 개수 +1
for i in range(N):
width = 0
height = 0
for j in range(N):
width += board[i][j]
height += board[j][i]
if width == 0:
answer += 1
if height == 0:
answer += 1
return answer
- 효율성 테스트를 통과하기 위해 숫자가 담긴 리스트를 set 자료구조로 변형.
- time complexity를 O(N4)에서 O(N2)로 줄임.
4. Lv 3 - 방문길이
변경 전
def solution(dirs):
answer = 0
d = {'U': (0, 1), 'D': (0, -1), 'L': (-1, 0), 'R': (1, 0)}
visited = []
start_idx = (0, 0)
for cmd in dirs:
next_idx = (start_idx[0] + d[cmd][0], start_idx[1] + d[cmd][1])
if abs(next_idx[0]) > 5 or abs(next_idx[1]) > 5:
continue
if (start_idx, next_idx) not in visited:
visited.append((start_idx, next_idx))
visited.append((next_idx, start_idx))
answer += 1
start_idx = next_idx
return answer
- 인덱스로 접근하기보다는 딕셔너리 자료구조를 활용해 볼 것.
- 변수가 무슨 역할을 하는지 변수명에서 드러나는 게 좋음.
- command : 받는 문자열이 캐릭터를 움직이는 명령어이기 때문에
- dir_coord : 방향과 각각에 해당하는 좌표를 나타내기 때문에
변경 후
def solution(dirs):
answer = 0
dir_coord = {'U': (0, 1), 'D': (0, -1), 'L': (-1, 0), 'R': (1, 0)}
visited = set()
start_idx = (0, 0)
for cmd in dirs:
next_idx = (start_idx[0] + dir_coord[cmd][0], start_idx[1] + dir_coord[cmd][1])
if abs(next_idx[0]) > 5 or abs(next_idx[1]) > 5:
continue
if (start_idx, next_idx) not in visited:
visited.add((start_idx, next_idx))
visited.add((next_idx, start_idx))
answer += 1
start_idx = next_idx
return answer
- 딕셔너리 자료구조를 활용하여 적용하니 코드가 훨씬 간결하고 이해하기 쉬워짐.
스택
1. Lv 2 - 쇠막대기
def solution(s):
stack = []
answer = 0
for c in s:
if c == '(':
stack.append(c)
cut = True
else:
stack.pop()
if cut:
answer += len(stack)
cut = False
else:
answer += 1
return answer
- 올바른 괄호 문제를 변형하여 풀이함.
- 레이저를 replace()를 사용하여 다른 문자로 변경하고 풀어보기. replace()의 time complexity는 O(N)이다.
2. Lv 2 - 짝지어 제거하기
def solution(s):
stack = []
for alphabet in s:
if not stack or alphabet != stack[-1]:
stack.append(alphabet)
else :
stack.pop()
return 1 if not len(stack) else 0
:
앞에는 띄어쓰기를 넣지 않는 편이 좋음. 즉,else :
->else:
3. Lv 2 - 사전순 부분문자열
def solution(s):
stack = []
for alphabet in s:
while len(stack) > 0 and stack[-1] < alphabet:
stack.pop()
stack.append(alphabet)
return ''.join(stack)
모의고사
1. 좌석 구매
def solution(seat):
seat = map(tuple, seat)
seat = set(seat)
return len(seat)
2. 대중소 괄호 짝 맞추기
변경 전
def solution(s):
open_bracket = ['(', '{', '[']
close_bracket = [')', '}', ']']
new_list = []
new_idx_list = []
for bracket in s:
if bracket in open_bracket:
new_idx_list.append(open_bracket.index(bracket))
new_list.append(bracket)
print(new_idx_list, new_list)
else:
if len(new_list) and new_list[-1] == close_bracket[new_idx_list[-1]]:
new_list.pop()
new_idx_list.pop()
print(new_idx_list, new_list)
else:
return False
return False if len(new_list) else True
- 딕셔너리 자료구조를 활용해 볼 것
변경 후
def solution(s):
pairs = {'(': ')', '{': '}', '[': ']'}
new_list = []
for bracket in s:
if bracket in pairs:
new_list.append(bracket)
else:
if len(new_list) and bracket == pairs.get(new_list[-1]):
new_list.pop()
else:
return False
return False if len(new_list) else True
- 변수명을 확실하게 하자. new_list -> stack 등
- if len(new_list) == if new_list
- pairs.get(new_list[-1]) -> paris[new_list[-1]]
'OLD > Coding Study' 카테고리의 다른 글
[4주차 정렬, DP] 코드 리뷰 (0) | 2020.03.16 |
---|---|
[3주차 탐색] 코드 리뷰 (0) | 2020.03.04 |
[1주차 큐, 힙] 코드 리뷰 (0) | 2020.02.23 |
[0주차 모의고사] 스킬 트리 (0) | 2020.02.18 |