728x90

알고리즘/PS - 프로그래머스 46

[프로그래머스 - 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에 푸시..

[프로그래머스 - C++] [1차] 프렌즈4블록

https://programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 풀이 차례로 board를 탐색하면서 블록을 지워가면 되는 문제입니다. 제거할 수 있는 블록을 찾으면서 동시에 제거해버리면 그 블록과 겹치게 4블록이 생성되는 경우 제대로 풀이되지 않습니다. 따라서 임시로 제거할 블록을 저장할 temp 벡터를 하나만들고, 제거할 블록을 찾은 후에 블록을 제거해주어야 합니다. 또한 블록을 제거한 후에는 그 빈..

728x90
반응형