코테 준비 30

[프로그래머스] 삼각 달팽이

programmers.co.kr/learn/courses/30/lessons/68645 ㅎ...ㅏ 규칙성이 이리도 쉬운걸 왜 코딩 챌린지 당시에는 안보였을까.. 로직 n = 4 일 경우 [1] [2, 9] [3, 10, 8] [4, 5, 6, 7] 위와 같이 나타낼 수 있다 여기서 나타나는 규칙성은 숫자를 순서대로 넣는다고 할 때, x 인덱스 값 증가(왼쪽 면 채우기) y 인덱스 값 증가(바닥 면 채우기) x, y 인덱스 값 감소(오른쪽 면 채우기) 가 한 사이클이다. python에서는 case 문이 따로 존재하지 않아 채워야 하는 면이 바뀔 때마다 mode라는 변수에 1씩 더하고, % 3을 해주어 case 문과 비슷한 방식으로 동작하게끔 했다. 그리고 ( 1, 2, 3, 4 )가 왼쪽 면 ( 5, 6,..

코테 준비 2020.10.11

[프로그래머스] N -Queen

접근 엉엉..ㅠ 어려운 문제였다.. 예전에도 못풀고 포기했었던 문제였는데 이번에는 리더님의 도움을 받아 간신히 풀 수 있었다 크게 search, check 파트로 나뉜다. search 함수 dfs를 이용하여 모든 경우의 수를 순회한다 for loop이 0부터 n까지 돌아간다(이 부분을 잘하면 최적화를 할 수 있을 것같긴 하다) 현재 x 자리에 순회하면서 업데이트 되는 값들을 넣어주고(y값들) check했을 때 True라면 그 다음 자리인 x + 1 자리로 넘어가서 다시 탐색한다. (dfs 방식) loop 한 턴에 한 column 씩 확인 check 함수 현재 위치와 값이 주어진 조건에 부합하는지 확인하고, boolean을 리턴한다 개념이 살짝 말로 하기 어려워서 그림으로 잘 풀어내봤는데 미래의 내가 다시..

코테 준비 2020.09.25

[프로그래머스] 카펫

로직 red가 n * m 의 직사각형이라고 가정했을 때 sum = brown + red = (n+2) * (m+2) brown = 2(n+2) + 2(m+2) - 4 red = n*m 위 세 가지 조건을 만족한다 따라서, 식을 정리하여 n*m 과 n+m 두 가지 값을 구한 뒤 for loop으로 1부터 sum//2까지 순회하며, 현재 값 * (sum - 현재값) = n * m 이 되는 조합을 찾는다 찾게되면 각각 +2 씩을 해준다(n*m는 red에 대한 값이므로) 그리고 큰 수가 앞에오도록 정렬해준뒤 return 코드 def solution(brown, red): answer = [] sum = brown + red # red = n*m rect n_plus_m = brown//2 - 2 n_multi_..

코테 준비 2020.09.20

[프로그래머스] 세 소수의 합

로직 소수를 구하기 위해 에라토스테네스의 체를 사용하였다. 우리는 n = 1st 소수 + 2nd 소수 + 3rd 소수 를 구하는 것이기 때문에, n은 최소 10이상이어야한다. max_num은 구해야할 소수 중 가장 큰 값을 뜻하는데 이를 n-5로 설정해준 이유는, 1st 소수 + 2nd 소수 의 최솟값이 5이기 때문이다. 에라토스테네스의 체를 이용해서 소수를 구한다. O(n^2) nums 리스트를 모두 True로 설정 (nums의 사이즈는 max_num +1 : 인덱스와 소수를 일치시키기 위함) 2부터 끝까지 순회하며 True인 경우에는 소수로 간주하고 소수의 배수가 되는 숫자들은 모두 False로 바꾼다. 서로다른 세 소수들의 합이 n이 되는 경우의 수를 모두 구한다 O(n^2) nested loop을..

코테 준비 2020.09.18

[프로그래머스] 빙고

로직 딕셔너리를 사용해서 { num : board상의 idx } 정보들을 다 저장 N 사이즈의 rows, cols 리스트를 만들어서 각 행과 열에 몇 개의 num이 등장했는지 카운트 대각선은 (1) 현재 위치한 행 == 열 인 경우 카운트 --- [왼쪽 위에서 오른쪽 아래로 향하는 대각선] (2) 현재 위치한 행 + 열 + 1 == N 인 경우 카운트 --- [반대 대각선] rows와 cols는 순회하면서 카운트가 N일시 빙고 +1, diag_RL와 diag_LR은 값이 N일시에 빙고 +1 코드 def solution(board, nums): answer = 0 N = len(board) num_location = {} rows, cols, diag_LR, diag_RL = [0]*N, [0]*N, 0,..

코테 준비 2020.09.12

[카카오 2020 코테 #1] 문자열 압축 - python

처음에 입출력 예 #5 를 보지 못해서 '문자열이 제일 앞부터 정해진 길이만큼 잘라야'한다는 점을 몰랐다 그래서 더 어렵게 생각하다보니 문제 난이도에 비해서 생각을 매우 오래했던 문제다 항상...! 문제를 잘 읽어보고 문제에 임하도록하쟈! 로직 살짝 brute force(전체 탐색)느낌이다 chunking 단위를 len(s)//2 부터 1까지로 잡고 [ 반복 ] chunking 단위 > 0 일 동안 [ 반복 ] 문자열을 chunking 단위만큼 잘라준다 앞의 문자열과 같으면 카운트해주고 같지 않으면 카운트를 멈추고 압축가능한 경우 압축한다. chunking 길이를 -1 코드 1차 코드 def solution(s): answer = len(s) total_len = len(s) string_len = le..

코테 준비 2020.09.10

[프로그래머스 - heap] 더 맵게

programmers.co.kr/learn/courses/30/lessons/42626 로직 한 turn에 데이터를 pop한 후 새로운 데이터로 push하는 과정이 모두 들어가있고, 리스트는 항상 정렬상태여야한다. 이 상황에서 가장 적절한 데이터 구조는 heap이라고 생각하여 heapq 내장 모듈을 사용하였다. 1. heapify 하여 scoville 리스트를 heap 형식으로 만들어준다. 2. scoville의 길이가 0이 아니라면 아래의 과정을 반복한다. [pop] x = heappop() if x > K라면 [pop] y도 pop한 다음 [new_scoville = x + y*2] 연산을 해준다. [push] new_scoville를 heap에 넣어준다. else 모든 데이터가 K보다 크거나 같으므..

코테 준비 2020.09.07

[프로그래머스 - BFS] FloodFill

초기 변수 설정 check[][] : n*m 사이즈의 boolean 타입 2D Array BFS과정에서 grouping 완료된 좌표 => True queue : 현재 바라볼 좌표(x,y)를 pop, 바라보는 좌표의 이웃들 (x-1, y) (x+1, y) (x, y-1) (x, y+1)을 append 로직 이중 for 문으로 n*m 사이즈의 좌표를 차례로 탐색 if check하지 않은 좌표 해당 좌표를 bfs 탐색하며 grouping 한 후 count +=1 해준다. (BFS 탐색 한 번 == grouping 한 번) return count BFS 탐색 queue.append(탐색 시작 좌표) while queue is not empty: queue.popleft() # 현재 바라봐야할 좌표 pop if ..

코테 준비 2020.09.05

[프로그래머스/python] 기능 개발

https://programmers.co.kr/learn/courses/30/lessons/42586 로직 progress가 100% 이상이 되기 까지 필요한 일수(days)를 계산 lst에 모든 days를 넣어주었다. 계산된 days를 iterate하면서 다음과 같은 조건문으로 답을 구했다. if prev가 초기화 값(0)이면 prev에 값을 넣어준다. elif prev = 현재 days 값이면 count해준다. (앞에 있는 기능이 배포될 때 함께 배포 가능) for문 밖을 빠져나올 때, counter 값이 0이 아니라면 마지막 배포가 아직 안끝난 상황이므로 ..

코테 준비 2020.09.04