프로그래머스 LV.2 문제들 풀이

박경현·2023년 1월 24일
0

네이버 AI부스트캠프 2차 코테 준비를 위해 프로그래머스를 푸는데 어떻게 나올지 감도 안온다,,ㅋㅋ

그래도 무슨 문제가 나와도 다 대비할 수 있게 열심히 해보자!!

거리두기 확인하기

  1. 문제 분석
    주워졌던 규칙에서 5*5라는 규칙이 있었음
    2이하의 거리로 앉지 말기! (단 파티션 있으면 허용!)
    P- 사람 O- 빈책상, X - 파티션(이거 있으면 막힌거!)

    하나의 P라도 2 이하의 거리에 P가 있다면 0을 리턴! -> bfs문제라고 생각함!
    일단 나는 각각의 부분을 받아서 P거리에서 dx ,dy를 해서 근처에 P가 있는지 확인!
    여기서 O를 어떻게 처리할지 못풀었음! -> 근데 그냥 이것도 거리 취급하면 되었다!

  2. 코드 분석
    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 더해야하나는줄 알았는데 그냥 그 이후부터 거리 재면 됨!

가장 긴 펠린드롬

  1. 문제 분석
    이건 2500이라서 시간 복접도 크게 걱정없이 풀어도 될듯
    중요한게 중간에 잇는 펠린드롬을 어떻게 확인할 것인가
    -> 먼저 앞을 고정하고 뒤를 줄여보면서 확인 후 전부 아니면 앞을 하나 빼줌!!

  2. 코드 분석
    if x == x[::-1]:
    return True
    그리고 중요한게 s[:] 슬라이스 범위를 위해 뒤에를 반복할때 len(s)+1전까지 넣어야함!
    진짜 부르트 포스 문제네!!

야근지수

이 문제의 경우 heapq로 풀수있었다!

  1. 코드 분석
    heapq.heapify(works) 이러면 리스트를 heap형태로 사용가능!

쿼드 압축후 개수 세기

  1. 문제 분석
    문제는 대표적인 재귀 문제다
    4개로 나누니까 ab/ a+l b / a b+l / a+l b+l 로 보면됨

  2. 코드 분석
    일단 길이를 고정한뒤 나누기 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

2개 이하로 다른 비트

  1. 문제 분석
    13 -> 1100이 최소 값ㅎ!!
    홀수면 1101 -> 0이 나오는 부분까지 찾아보고 그 부분을 1로 바꾸기! 그리고 1111
    -> 그리고 그 전꺼 0으로 바꾸기!

짝수면 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
profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글