코딩테스트
[프로그래머스] Level 2 - N-Queen (Python)
https://programmers.co.kr/learn/courses/30/lessons/12952 코딩테스트 연습 - N-Queen 가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은 programmers.co.kr ✅ Solution 첫 번째 열부터 차례대로 퀸을 추가한다. 퀸을 추가하고, 이전에 놓였던 퀸들과 행이 같지 않아야 하며 대각선에 위치하지 않아야 하는 조건을 체크한다. 열마다 하나씩 퀸을 추가할 것이므로 열이 같은 경우는 존재하지 않으므로 열에 대한 고려는 해주지 않아도 된다. (항상 하나의 열에 퀸 하나만 존재) new_queen_col == ..
[프로그래머스] Level 2 - 숫자 블록 (Python)
https://programmers.co.kr/learn/courses/30/lessons/12923 코딩테스트 연습 - 숫자 블록 1 10 [0, 1, 1, 2, 1, 3, 1, 4, 3, 5] programmers.co.kr ✅ Solution 자기 자신을 제외한 최대 약수가 답이다. 주의할 점은 길이는 1,000,000,000인 도로지만 들어가는 수의 최댓값은 10,000,000 이므로 최대 약수를 구할 때, 10,000,000을 넘지 않는다는 조건을 추가한다. ✅ Code def divisior(num): if num == 1: return 0 else: for i in range(2, int(num ** 0.5) + 1): if num % i == 0: if (num // i)
[프로그래머스] Level 2 - 땅따먹기 (Python)
https://programmers.co.kr/learn/courses/30/lessons/12913 코딩테스트 연습 - 땅따먹기 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟 programmers.co.kr ✅ Solution dp를 이용하여 문제를 해결했다. 행을 하나씩 늘려가며 각 열마다 가질 수 있는 최댓값을 할당했다. 예를 들어, 2행 1열까지 오는 최댓값은 1행 2열, 1행 3열, 1행 4열의 최댓값 + 2행 1열의 값이다. 예를 들어, 2행 2열까지 오는 최댓값은 1행 1열, 1행 3열, 1행 4열의 최댓값 + 2행 2열의 값이다. 이..
[프로그래머스] Level 2 - 스킬 트리 (Python)
https://programmers.co.kr/learn/courses/30/lessons/49993 코딩테스트 연습 - 스킬트리 programmers.co.kr ✅ Solution 스킬이 선행 스킬 순서 배열에 존재할 때, 배울 수 있는 스킬(now)과 스킬의 인덱스 값이 같을 때, 배울 수 있는 스킬의 값에 1을 더해준다. 만약 같지 않다면 선행 스킬을 배우지 않은 것이므로 False를 리턴한다. ✅ Code def check(skill_tree, skill): now = 0 for s in skill_tree: if s in skill: if skill.index(s) == now: now += 1 else: return False return True def solution(skill, skill..
[프로그래머스] Level 2 - 방문 길이 (Python)
https://programmers.co.kr/learn/courses/30/lessons/49994 코딩테스트 연습 - 방문 길이 programmers.co.kr ✅ Solution 이동했을 때 좌표가 범위 내에 있을 때, visited에 있는지 없는지 판단한다. 없다면 visited에 추가해주고, answer += 1을 해준다. ✅ Code def solution(dirs): answer = 0 visited = [] x, y = 5, 5 move = {'U': (-1, 0), 'D': (1, 0), 'R': (0, 1), 'L': (0, -1)} for dir in dirs: nx, ny = x + move[dir][0], y + move[dir][1] if 0
[프로그래머스] Level 2 - 가장 큰 정사각형 찾기 (Python)
https://programmers.co.kr/learn/courses/30/lessons/12905 코딩테스트 연습 - 가장 큰 정사각형 찾기 [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9 programmers.co.kr ✅ Solution 정사각형이 되기 위해서는 최소한 위, 왼쪽, 왼쪽 대각선의 값이 0이 아니여야 하는 것을 이용한다. 만약 위, 왼쪽, 왼쪽 대각선의 값이 모두 0이 아니라면 정사각형이 될 수 있다는 의미이므로 그중 최솟값을 찾아 1을 더해준다. row나 col이 1 일수 있으므로 board [0][0] 값에 따라 answer 초기값을 정해준다. ✅ Code def solution(board): answer = 0 if not board[0][0] e..
[프로그래머스] Level 2 - 쿼드압축 후 개수 세기 (Python)
https://programmers.co.kr/learn/courses/30/lessons/68936 코딩테스트 연습 - 쿼드압축 후 개수 세기 [[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15] programmers.co.kr ✅ Solution 재귀함수를 이용한다. 만약 첫번째 요소와 값이 다르다면 압축이 불가능하므로, 다시 함수를 호출한다. 모두 같다면 압축 가능하므로 answer에 값을 더해준..
[프로그래머스] Level 2 - n^2 배열 자르기 (Python)
https://programmers.co.kr/learn/courses/30/lessons/87390 코딩테스트 연습 - n^2 배열 자르기 정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부 programmers.co.kr ✅ Solution left, right를 통해 해당되는 row들의 값만 구하는 것이 시간 초과 나지 않게 푸는 방법이다. left % n, right % n 은 몇 번째 row인지를 나타낸다. 즉, left~right의 값은 left % n 번째 row부터 right % n 번째 row 사이에 존재한다..