본문 바로가기

전체 글

(47)
백준 11559번 Puyo Puyo 문제 설명 dx, dy는 상하좌우에 같은 색깔의 뿌요가 있는지 확인할 때 사용한다. refresh 함수는 뿌요가 터지고 뿌요들을 다시 아래로 떨어지게 하는 함수다. color 배열에 해당 열에 있는 모든 색들을 넣고 가장 아래서부터 차례대로 채워넣는다. boom_count는 연쇄가 일어나는지 판별하기 위한 변수다. cur_color는 해당 위치의 뿌요의 색깔을 의미하고 color_count는 해당 뿌요와 같은 색깔의 뿌요의 갯수를 뜻한다. dfs를 사용하여 queue에 뿌요를 넣고 인접하는 같은 색깔의 뿌요를 same_color에 넣는다. 만약 인접한 같은 색깔의 뿌요가 3개 이상일 경우 boom_count를 1 더해주고 뿌요들을 . 으로 바꾼후 refresh 함수를 호출한다. 이중 for문을 돌린 후에..
백준 18808번 스티커 붙이기 문제 설명 해당 스티커를 붙일 수 있는지 확인한다. arr은 해당 스티커를 의미하고 plist에 스티커의 좌표를 넣어준다. flag는 스티커를 붙일 수 있는지 판별하는 bool형 변수다. 이중 for문을 통해 처음부터 끝의 좌표들을 검사해 스티커를 붙일 수 있는지 확인한다. 확인해야 하는 경우의 수는 총 세 가지다. 스티커를 붙일 때 가로측 범위를 벗어나는지, 세로측 범위를 벗어나는지, 이미 스티커가 붙여있는지를 확인하면 된다. 만약 붙일 수 없는 경우 스티커를 90도 회전시키고 plist를 초기화한다. 해당 내용을 3번 더 반복한다. 전체 코드 laptop = [] M = 0 N = 0 def turn(arr): n = len(arr) m = len(arr[0]) tmp = [] for j in ran..
백준 12100번 2048(Easy) 문제 설명 max_block은 가장 큰 블록을 뜻하고 count는 이동한 횟수를 뜻한다. 이동한 횟수가 5번이면 해당 블록에서 가장 큰 값과 max_block을 비교한다. goUp함수는 위로 블록을 이동시키는 함수다. copy_board는 위로 이동한 블록의 결과값을 저장한다. goUp함수는 첫번째 열부터 마지막 열까지 반복문을 돌린다. 반복문의 순서는 1. 해당 열에서 0보다 큰 값이 있으면 해당 열의 index를 tmp 배열에 담는다. 2-1. tmp 배열의 길이가 1일 경우 copy_board에 해당 열의 첫번째 행에 값을 대입한다. 2-2. tmp 배열의 길이가 1보다 클 경우 tmp에서 index를 2개씩 빼서 블록값을 비교 후 값이 같으면 results 배열에 담고 같지 않으면 나중에 뺀 in..
백준 15683번 감시 문제 설명 office는 사무실을 나타내는 배열, cctv는 사무실에 있는 cctv의 위치를 뜻한다. cctv가 없다는 뜻은 더이상 감시할 cctv가 없다는 뜻이므로 해당 사무실에서 0의 개수를 센 후 min_count와 비교해준다. cctv가 존재하면 하나씩 pop을 하여 해당 cctv의 종류에 맞게 office의 배열을 설정한다. x_pos는 cctv의 행의 좌표, y_pos는 cctv의 열의 좌표다. 만약 cctv가 1번 cctv일 경우 감시할 방향의 경우의 수는 총 4개이므로 for문을 사용하여 감시할 영역을 '#'으로 바꾼다. 여기서 함수에서 인자로 받은 arr을 그대로 사용할 경우 배열 자체의 데이터가 바뀌기 때문에 copy_office로 복사한 후 copy_office의 값을 변경한다. 이렇..
백준 16987번 계란으로 계란치기 해당 문제는 phython에서 시간 초과가 나서 pypy3으로 제출하였다. 문제 설명 cur은 현재 계란의 위치를 의미한다. 만약 현재 위치가 eggs 배열의 범위에서 벗어날 경우 깨진 계란의 수를 세어 max_count값과 비교한다. 만약 해당 위치의 계란이 깨졌을 경우 다음 계란으로 넘어가고 해당 계란이 깨지지 않았을 경우 다른 깨지지 않은 계란들을 하나씩 쳐본다. flag는 다른 계란들이 모두 깨져서 칠 계란이 없을 경우 False값을 가지고 하나라도 칠 계란이 있으면 True값을 가진다. 전체 코드 eggs = [] max_count = 0 def func(eggs,cur): global max_count if cur == len(eggs): count = 0 for i in range(len(e..
백준 1799번 비숍 문제 설명 N-Queen 문제를 돌려서 생각하여 (왼쪽에서 오른쪽으로 가는) / 모양의 대각선으로 해당 줄을 검사하면서 한 줄 씩 내려갔다. 훑어야 하는 대각선의 총 개수는 체스판의 크기 * 2 - 1 이다. (예를 들어, 체스판 크기가 3이면 ///// 이렇게 5개를 검사해야한다.) / 대각선을 N-Queen의 가로라고 보면 된다. isused는 \모양의 대각선으로 이런 식으로 (x,y)에 비숍을 넣으면 isused(x-y+체스판 크기-1)의 값을 1로 설정하여 해당 대각선은 사용되고 있다는 것을 표시해줬다. 함수의 매개변수로 cur, length, count를 설정했는데 cur은 현재 / 대각선의 위치(체스판 크기가 3이면 0부터 5까지다.), length는 / 대각선이 체크할 체스판의 개수, cou..
백준 1182번 부분수열의 합 문제 설명 이진 트리를 사용하여 해당 정수를 더할지 말지를 정했다. 이진 트리에서 왼쪽으로 가면 정수를 더하지 않는 것이고 오른쪽으로 가면 정수를 더하는 방식으로 생각했다. cur은 현재 depth을 뜻하고 total은 수열의 합을 뜻한다. cur이 depth인 S와 같아졌을 때 해당 수열의 합이 N과 같으면 count를 1 더하고 함수를 종료한다. cur이 height보다 작을 경우 이진 트리의 왼쪽으로 갈 경우와 오른쪽으로 갈 경우를 나누어 함수를 호출한다. 전체 코드 arr = [] count = 0 N = 0 S = 0 def func(cur,total): global count global N global arr global S if cur == S: if total == N: count += ..
백준 9663번 N-Queen 해당 문제는 파이썬으로 제출할 경우 시간 초과가 발생하기 때문에 pypy3로 제출하였다. 문제 설명 isused는 퀸이 있는 위치, num은 체스판의 길이, count는 퀸을 놓는 방법의 수를 나타낸다. func의 인자로는 해당 위치의 행을 넣고 그 값이 체스판의 길이와 같아졌을 때 count를 1 증가시킨 후 함수를 종료한다. b는 열을 의미하고 for문을 사용하여 모든 열을 검사한다. isused에 값이 있다는 것은 첫째줄이 아니라는 뜻이므로 queen을 놓을 수 있는지 검사한다. isOk는 해당 위치인 (a,b)에 퀸을 놓을 수 있는지 판별하는 bool 값이다. 퀸을 놓을 수 있는지 판별하기 위해 검사해야할 것은 총 세 개다. 1) 같은 열에 있는가 2) 같은 대각선에 있는가 2-1) 왼쪽에서 오른..