728x90

알고리즘 219

[프로그래머스 - Java] 큰 수 만들기

https://programmers.co.kr/learn/courses/30/lessons/4288# 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 풀이 스택을 이용해서 풀이하는 경우들도 있긴 하지만 저는 인덱스를 이용해서 풀이하였습니다. 앞에서부터 삭제가능한 범위에서 가장 큰 수를 하나씩 선택해서 answer 문자열에 하나씩 추가하며 삭제해 나갑니다. 이를 k개 삭제시 까지 반복하거나 아니면 남길 수 있는 숫자수 (len - k 개)를 모두 남긴 경우 까지 반복합니다. while문에서 k개를 모두 삭제한 경우, 뒤에 숫자를 더 붙여주어야 할 필요가 있습니다. 반대로 남길 수 있는 숫자 수를 모두 남긴 경우엔 뒤에 있는 숫자들을 삭제한다고 생각해야합니다. 따라서 뒤에 숫자를 추가로 붙..

[프로그래머스 - Java] N-Queen

https://programmers.co.kr/learn/courses/30/lessons/12952 코딩테스트 연습 - N-Queen 가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은 programmers.co.kr 풀이 이 문제는 n*n크기의 체스판에 n개의 퀸을 서로 한번에 공격할 수 없도록 놓는 경우의 수를 구하는 문제입니다. n이 12이하로 매우 작은 값이기 때문에 저는 재귀를 이용하는 백트래킹 알고리즘을 사용해서 문제를 해결하였습니다. 우선 알아둘 것은 체스에서 퀸이 이동하는 방향은 가로, 세로, 대각선 입니다. 따라서 저는 맨위 가로줄 부터 한 줄에..

[프로그래머스 - Java] 멀리 뛰기

https://programmers.co.kr/learn/courses/30/lessons/12914 코딩테스트 연습 - 멀리 뛰기 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2 programmers.co.kr 풀이 이 문제는 프로그래머스에 레벨 3으로 올려져 있는 문제인데... 그럴 난이도는 절대 아닌듯해요. 레벨2로 내려가야하지 않나 싶습니다. 저는 이 문제를 푸는데에 규칙을 찾아서 풀었습니다. 이동할 수 있는 칸은 1칸 또는 2칸입니다. 이를 통해서 생각할 수 있는 것은 만약 5칸을 이동하는 경우 (3칸을 ..

[프로그래머스 - Java] 행렬 테두리 회전하기

https://programmers.co.kr/learn/courses/30/lessons/77485 코딩테스트 연습 - 행렬 테두리 회전하기 6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3] programmers.co.kr 풀이 이 문제는 달팽이 문제가 생각나는 문제 유형입니다. 효율성이 중요한 문제도 아니기 때문에 무난하게 풀이 가능한 문제 입니다. 회전과 최솟값 확인을 한 번에 할 수도 있지만 저는 둘을 따로 for문을 만들어 각자 해주었습니다. 또한 회전에는 두개의 2차원 배열을 이용하여 하나의 배열에는 회전을 임시로 저장해 두었습니다. 하나만 이용할 경우는..

[프로그래머스 - Java] 배달

https://programmers.co.kr/learn/courses/30/lessons/12978 코딩테스트 연습 - 배달 5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4 programmers.co.kr 풀이 이 문제는 다익스트라를 이용하면 간단하게 해결 가능한 문제입니다. 주석 참고!! Java(자바) 코드 import java.util.*; class Solution { public int solution(int N, int[][] road, int K) { int answer = 0; int[][] haveRoad = new int..

[프로그래머스 - Java] [3차] 방금그곡

https://programmers.co.kr/learn/courses/30/lessons/17683 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, programmers.co.kr 풀이 이 문제는 재생시간을 계산해서 그 시간에 맞는 전체 악보를 생성하는 것이 중요한 문제입니다. 저는 악보 생성에서 삽질을 너무 했습니다ㅠㅠ 제가 이용한 알고리즘은 다음과 같습니다. 시작시간, 종료시간을 모두 분 단위로 변환해 재생시간 구함 재생시간에 맞게 재생되는 전체 악보 생성 (# 을 고려해서 몇분짜리 악보인지 구해야함) 전체 악보에서 문자열..

[프로그래머스 - Java] 스킬트리

https://programmers.co.kr/learn/courses/30/lessons/49993 코딩테스트 연습 - 스킬트리 programmers.co.kr 풀이 이 문제는 정해진 선행 스킬 순서에 따라 배울 수 있는 스킬 트리의 수를 구하는 문제 입니다. for문을 이용해 하나의 스킬 트리씩 배울 수 있는지를 확인. 각각의 스킬 트리에 대해서 alpha[]라는 배열을 하나 생성하여 해당 스킬트리 문자열에서 그 알파벳(스킬)이 나타는 index를 저장. 이 때 alpha[]는 100로 초기화하여 아예 해당 스킬을 배우지 않는 경우를 처리줌. (선행 스킬을 안배우고 다음걸 배우는 경우가 처리 가능하도록!) 각각의 스킬이 주어진 skill 문자열의 순서대로 배워지는지 확인하기 위해 다음 for문 실행 ..

[프로그래머스 - C++] 블록 이동하기

https://programmers.co.kr/learn/courses/30/lessons/60063 코딩테스트 연습 - 블록 이동하기 [[0, 0, 0, 1, 1],[0, 0, 0, 1, 0],[0, 1, 0, 1, 1],[1, 1, 0, 0, 1],[0, 0, 0, 0, 0]] 7 programmers.co.kr 풀이 이 문제는 BFS 알고리즘을 이용해서 해결 가능한 문제입니다. 큐에 을 모두 넣어주었습니다. 처음엔 을 넣고 큐가 텅 빌 때까지 아래의 과정을 반복합니다. 우선 큐의 맨앞 좌표 값을 pop합니다. pop할 때 마다 목적지에 도착한지 여부를 확인합니다. (도착한 경우 time을 반환하고 끝) 현 위치에서 상하좌우 이동방향으로 이동가능한지 여부를 확인해 이동가능한 경우 큐에 push해줍니다..

[프로그래머스 - C++] 기지국 설치

https://programmers.co.kr/learn/courses/30/lessons/12979 코딩테스트 연습 - 기지국 설치 N개의 아파트가 일렬로 쭉 늘어서 있습니다. 이 중에서 일부 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 기술이 발전해 5g 수요가 높아져 4g 기지국을 5g 기지국으로 바꾸려 합니다. 그런데 5 programmers.co.kr 풀이 이 문제는 재귀를 사용해서 풀이하였습니다. 우선 이미 있는 기지국을 가지고 전파가 전달되지 않는 구간들만 찾아서 해당 구간들에 대해 sol()함수를 호출합니다. sol()함수 내에서는 하나의 기지국을 앞에서 부터 설치하고 뒤에 아직도 전파 전달이 되지 않는 구간이 있을 경우 그 구간에 대해 sol()함수를 다시 호출합니다. #includ..

[프로그래머스 - C++] 짝지어 제거하기

https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 풀이 처음엔 그냥 while문안에서 for문으로 쌍을 찾는 방식으로 코드를 작성하였더니 효율성이 하나도 통과하지 못하는 처참한 상황이 생겼습니다. 그래서 스택을 사용해서 O(n)으로 해결될 수 있도록 코드를 새로 작성하였습니다. 우선 문자열 s를 for문을 이용해 처음부터 차례로 탐색합니다. stack이 비어있는 경우, 현재 문자를 stack에 푸시..

728x90
반응형