네이버 AI부스트캠프 2차 코테 준비를 위해 프로그래머스를 푸는데 어떻게 나올지 감도 안온다,,ㅋㅋ
그래도 무슨 문제가 나와도 다 대비할 수 있게 열심히 해보자!!
문제 분석
주워졌던 규칙에서 5*5라는 규칙이 있었음
2이하의 거리로 앉지 말기! (단 파티션 있으면 허용!)
P- 사람 O- 빈책상, X - 파티션(이거 있으면 막힌거!)
하나의 P라도 2 이하의 거리에 P가 있다면 0을 리턴! -> bfs문제라고 생각함!
일단 나는 각각의 부분을 받아서 P거리에서 dx ,dy를 해서 근처에 P가 있는지 확인!
여기서 O를 어떻게 처리할지 못풀었음! -> 근데 그냥 이것도 거리 취급하면 되었다!
코드 분석
bfs니까 from collections import deque
일단 P가 있는 부분만 모으기!
for i in range(5):
for j in range(5):
if p[i][j] ==‘P’:
start.append([i,j])
P가 있는 부분을 모은 배열에서 하나씩 y,x위치를 꺼내서 그 근처를 조사하기!
O P 두개만 보면 된다! X는 막혀있으니까 볼필요 없다!
q = deque[s])
나는 내 위치도 1 더해야하나는줄 알았는데 그냥 그 이후부터 거리 재면 됨!
문제 분석
이건 2500이라서 시간 복접도 크게 걱정없이 풀어도 될듯
중요한게 중간에 잇는 펠린드롬을 어떻게 확인할 것인가
-> 먼저 앞을 고정하고 뒤를 줄여보면서 확인 후 전부 아니면 앞을 하나 빼줌!!
코드 분석
if x == x[::-1]:
return True
그리고 중요한게 s[:] 슬라이스 범위를 위해 뒤에를 반복할때 len(s)+1전까지 넣어야함!
진짜 부르트 포스 문제네!!
이 문제의 경우 heapq로 풀수있었다!
문제 분석
문제는 대표적인 재귀 문제다
4개로 나누니까 ab/ a+l b / a b+l / a+l b+l 로 보면됨
코드 분석
일단 길이를 고정한뒤 나누기 2 를 계속 하면서 위치 찾아주기!
처음부분을 start = arr[a][b] 로 해서 계속 구해주기!
def solution(arr):
answer = []
result = [0,0]
length = len(arr)
def compression(a,b,l):
start = arr[a][b]
for i in range(a,a+l):
for j in range(b, b+l):
if arr[i][j] != start:
l = l//2
compression(a,b,l)
compression(a+l,b,l)
compression(a,b+l,l)
compression(a+l,b+l,l)
return
result[start]+=1
compression(0,0,length)
return result
짝수면 100 일텐데 이러면 맨 뒤가 무조건 0-> 이것만 1로 바꾸면 끝!
def solution(numbers):
answer = []
for number in numbers:
bin_number = list(‘0’+ bin(number)[2:]
idx = ‘’.join(bin_number).rfind(‘0’)
bin_number[idx] = ‘1’
if number % 2 ==1:
bin_number[idx+1] = ‘0’
answer.append(int( ‘’.join(bin_number) ,2))
return answer