알고리즘 풀이/프로그래머스 109

[Level 2] 큰 수 만들기

programmers.co.kr/learn/courses/30/lessons/42883?language=python3 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 접근 프로그래밍적으로 어떻게 풀 수 있을까가 아닌 그냥 어떻게 풀지만 생각하여 적당한 방법이 떠오르지 않았다. 그래서 다른 사람들의 풀이를 참고하였다. 그리디 알고리즘으로 분류가 되어있었고 어떠한 기준으로 최적을 선택할지 고민을 했었다. 이럴때 앞에서부터 탐색하면서 어떻게 최적의 해를 구할지 손으로 풀어가면서 생각을 발전시킬 필요가 있다. 스택을 활용하여 스택에 첫 숫자를 넣어주고 시작한다 두 번째 숫자부터 탐색을 진행한다. 이때 스택의 top과 계속 비교하여 top이 더작고 제거할 수인 k가 남아있다면 계속해서 pop을 ..

[Level 2] 튜플

programmers.co.kr/learn/courses/30/lessons/64065 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 접근 문자열로 들어오는 것이 리스트의 형태로 들어온다면 굉장히 쉬운문제라고 생각했다. 그래서 입력된 문자열을 리스트로 변환하는 과정을 거쳤으며 이후에 2차원 리스트가 생성이 되었고 2차원 안의 리스트들의 길이에 따라 오름차순으로 정렬하여 문제에서 원하는 답을 구하였다. 구현 입력된 문자열을 탐색한다. 숫자가 들어온다면 wor..

[Level 2] 다음 큰 숫자

programmers.co.kr/learn/courses/30/lessons/12911 코딩테스트 연습 - 다음 큰 숫자 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니 programmers.co.kr 접근 n+1부터 검사를 하여 bin()을 통해 이진수로 변한 후 1의 개수를 카운트하였다. 그리고 입력받은 n과 같을 때 출력하도록한다. 구현 먼저 입력받은 n을 이진수로 변환하고 1의 개수를 cmp에 저장한다. 그리고 n+1부터의 수를 이진수로 변환하고 1의 개수를 카운트하여 cmp와 비교한다. 같을 때에는 answer에 추가하고 break를..

[Level 2] 숫자의 표현

programmers.co.kr/learn/courses/30/lessons/12924 코딩테스트 연습 - 숫자의 표현 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 programmers.co.kr 접근 투포인터를 사용해보았다. 1~n까지 포함된 리스트를 생성하였고 left와 right는 각 숫자의 인덱스를 가리키도록 하였다. 그리고 left부터 right까지의 합이 n미만이면 right를 증가 초과면 left를 증가시켜 합이 n이 되는 연속된 수의 합을 찾았다. 구현 left가 right를 넘어서거나 right가 n을 넘어서면 while문을 종료시켰..

[Level 3] N-Queen

programmers.co.kr/learn/courses/30/lessons/12952?language=python3 코딩테스트 연습 - N-Queen 가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은 programmers.co.kr 접근 어떤 (x, y)에 퀸을 놓는다면 같은 x축과 y축 그리고 (x, y)에 대각선에 퀸을 놓을 수 없다. 위의 조건으로 NxN의 칸에 N개의 퀸을 놓아야한다. 만약 어떠한 행에 퀸을 놓는다면 더이상 그 행에는 퀸을 놓을 수 없다. 즉 각 행에는 하나의 퀸만 있을 수 있으며, 각 열에는 하나의 퀸만 놓을 수 있다. 이를 토대로 체..

[프로그래머스] K번째 수 - map(), filter(), sort()

programmers.co.kr/learn/courses/30/lessons/42748 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr 나의 코드 javascript는 sort를 할 때 유니코드 포인터 순서로 문자열을 비교해서 정렬한다. 따라서 정렬기준을 명시해줘야 한다. function solution(array, commands) { var answer = []; for(var i=0; i { const [sPosition, ePosition, position] = command const newArray = array .filter((value, fIndex) => fI..

[Level 3] 정수 삼각형

programmers.co.kr/learn/courses/30/lessons/43105 코딩테스트 연습 - 정수 삼각형 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 programmers.co.kr 접근 위에서 아래로 내려올 때 최댓값을 더해가면서 내려온다. 최종적으로 마지막 행에서 정수 삼각형의 최댓값을 찾도록한다. 구현 위에서 아래로 내려올 때 인덱스 0은 이전 행의 0과 더해준다. 그리고 마지막 열은 이전 행의 마지막 열과 더해준다. 위 두 개의 경우를 제외하고 가운데 있는 수들은 이전 행의 왼쪽 열과 이전 행의 열 중 최댓값을 더하도록 한다. def solution(triangle): answer = 0 n = len(triangle) f..

[Level 2] 카펫

programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 programmers.co.kr 접근 노란색의 칸 수는 (가로길이-2) x (세로길이-2)가 된다. 2를 빼주는 이유는 양옆과 위아래로 한 칸씩 갈색 칸이 있기 때문이다. 입력받는 노란색과 갈색칸을 더해주면 전체넓이가 되고 전체넓이의 약수 중에서 가로길이를 찾은 후에 가로길이를 통해 세로길이를 찾는다. 적합한 가로길이와 세로길이를 찾았다면 위에서 노란색 칸의 수를 구하는 공식에 대입하여 일치하는지 확인한..

[Level 2] 네트워크

programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 접근 DFS로 연결된 컴퓨터를 탐색하였다. 방문하지 않은 컴퓨터가 있을 때 방문하여 연결된 모든 컴터를 탐색하였다. 이렇게되면 DFS 탐색을 할 때마다 최종해를 카운트해주면 된다. 구현 방문 표시를 할 visited 리스트를 초기에 False로 초기화해줬다. visited = [False for _ in range(n)] 0번부터 탐색을 하여 방문하지 않은 컴퓨터가 있으..

[Level 2] 땅따먹기

programmers.co.kr/learn/courses/30/lessons/12913 코딩테스트 연습 - 땅따먹기 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟 programmers.co.kr 접근 백준의 RGB거리와 같은 유형의 문제였다. 그 이유는 0행부터 내려오면서 땅을 밟고 연속해서 같은 행의 땅은 밟을 수 없다고 했을 때 가장 아래의 행에 내려왔을 때 최대값을 구하는 것이기 때문이다. 따라서 1행부터 이전의 행에서 밟을 수 있는 땅 중 최대를 찾아 더해가면서 밑으로 내려가도록 한다. 구현 def solution(land): answer ..

728x90
반응형