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

[Level 2] 멀쩡한 사각형

programmers.co.kr/learn/courses/30/lessons/62048 코딩테스트 연습 - 멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 programmers.co.kr 접근 입력되는 W와 H가 1억 이하의 자연수이다. 그래서 뭔가 탐색을 하여 답을 구할 수 없다고 생각을 하고 규칙을 찾아보려고 했다. 하지만 규칙을 찾지 못하였고 다른 사람들의 풀이를 참고하였다. 종이에 여러가지 테스트 케이스로 그림을 그려보았는데 꼭지점의 개수에 주목을 하였다. WxH에서 대각선을 그었을 때 꼭지점의 개수가 W와 H의 최대공약수였다..

[Level 2] 짝지어 제거하기

programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 접근 스택을 활용하였다. 스택의 top과 다른 글자면 push하고 같은 글자면 pop하여 스택이 비어있는지 그렇지 않은지에 따라 최종해를 반환한다. 구현 입력된 문자열을 리스트로 변경한다. 각 리스트를 탐색하면서 스택의 top과 같다면 pop, 다르다면 push를 한다. 리스트를 모두 탐색했을 때 스택에 값이 들어있다면 실패, 스택이 비어있다면 성공을 반환한다. ..

[Level 2] N개의 최소공배수

programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 접근 입력되는 리스트의 모든 수를 곱한 결과까지 탐색을 하여, 여기서 구한 최댓값에 입력된 리스트의 각 숫자들을 나눴을 때 모두 나누어 떨어진다면 그 수를 반환한다. 구현 먼저 입력된 리스트의 수를 모두 곱하여 max_num에 저장하고 2부터 max_num까지 탐색을 한다. 이후 i (2부터 max_num)를 입력된 리스트의 원소들로..

[Level 2] 최댓값과 최솟값

programmers.co.kr/learn/courses/30/lessons/12939 코딩테스트 연습 - 최댓값과 최솟값 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를 programmers.co.kr 접근 입력된 문자열을 공백을 기준으로 리스트와 int형으로 변경하여 최솟값과 최댓값을 찾는다. 구현 split을 통해 공백을 기준으로 각 문자를 리스트의 원소로 만들어주고 이 원소들을 int형으로 변경한다. 이후 최솟값과 최댓값을 찾아 str형으로 변경하고 이를 answer에 추가한다. def solution(s): answer = '' number..

[Level 2] 소수 찾기

programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 접근 처음에 접근했던 방식은 주어진 숫자 중 최댓값을 생성하여 2부터 최댓값까지 탐색하여 소수일 때 입력된 숫자 안에 포함되는지 확인하려고 했다. 하지만 몇몇 케이스에서 시간초과가 발생하였다. 그래서 주어진 숫자에서 만들 수 있는 수를 만들어 소수를 판별하고자 하였다. 구현 permutations를 통해 1부터 입력된 숫자의 길이만큼의 순열을 만들어준다. 생성된..

[Level 2] H-Index

programmers.co.kr/learn/courses/30/lessons/42747?language=python3# 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 접근 문제를 이해하는데 어려움을 겪었고 많은 테스트 케이스를 놓쳤다. 먼저 인용횟수가 입력되는데 해당 인용횟수 중에서 h편 이상 인용된 논문이 h 이상일 때를 찾는 줄 알았다. 하지만 인용횟수가 담긴 리스트가 아닌 0회에서 10,000회 이하의 수 중에서 조건에 부합하는 h를 찾는 것이다. 또한 h편 이상인 논문..

[Level 3] 여행 경로

programmers.co.kr/learn/courses/30/lessons/43164 코딩테스트 연습 - 여행경로 [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] programmers.co.kr 접근 DFS로 ICN을 출발하여 깊게 탐색해 나간다. 탐색하다가 더이상 방문할 공항이 없을 때 경로에 하나씩 추가해온다. DFS를 재귀로 구현을 하면 도착점에서부터 경로에 추가되어 오기 때문에 마지막에 뒤집어서 반환하도록 한다. 구현 defaultdict는 딕셔너리를 생성하는 것인데 인자로 주어진 값으로 초기화를 한다. 여기서 리스트로 초기화..

[Level 2] 타겟 넘버

programmers.co.kr/learn/courses/30/lessons/43165# 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 접근 타겟넘버를 만들기 위한 연산은 덧셈과 뺄셈 뿐이다. 그래서 각 상황에서 덧셈을 할 때와 뺄셈을 할 때로 나눠서 계산을 해나가고 numbers의 수를 모두 사용했을 때 target과 비교해본다. 이문제를 dfs와 bfs로 모두 풀어보자 구현 ▶ DFS 각 상황에서 numbers에 있는 수를 더하거나 빼는 것을 dfs함..

[Level 3] 가장 먼 노드

programmers.co.kr/learn/courses/30/lessons/49189 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr 접근 처음에 DFS로 각 노드를 방문하려고 했다. 하지만 현재 노드에서 깊이있게 탐색하기 때문에 1, 2, 3 노드가 모두 연결되어있다고하면 1->2->3으로 방문하여 모순이 발생하는 경우가 있을 수 있다. 따라서 현재 노드에서 주변 노드를 먼저 방문하는 BFS로 탐색하였다. 또한 2차원 리스트로 그래프를 표현하면 시간초과가 발생하였고 인접 리스트로 구현하였다. 구현 먼저 입력받은 간선의 정보를 통해 무방향 그래프를 표현하였다. def solut..

[프로그래머스] 같은 숫자는 싫어

programmers.co.kr/learn/courses/30/lessons/12906?language=javascript 코딩테스트 연습 - 같은 숫자는 싫어 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 programmers.co.kr 나의 코드 입려된 배열의 마지막에서 두 번째 원소까지 탐색을 진행한다. 현재 인덱스의 숫자의 다음 인덱스의 숫자가 다르다면 answer에 push를 하며 탐색이 모두 종료되었을 때 마지막 인덱스의 숫자도 push하여 반환한다. function solution(arr) { var answer = []; for (va..

728x90
반응형