문제풀이/Implementation 9

[PS] 프로그래머스 - 과제 진행하기 ( 구현, 자료구조 ) with JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/176962 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ◎ 문제풀이 문제의 요구사항을 요약하면 다음과 같다. 1) 우선순위는 새로 시작한 과제가 높다. 2) 기존 진행중이던 과제는 우선순위가 낮다. 3) 멈추어둔 과제가 여러개이면 최근에 멈춘 순으로 시작 4) 과제를 끝낸순서로 이름을 배열에 담아 return 요구사항을 다음과 같은 알고리즘으로 구현하면 된다. 1) 우선순위큐를 사용하여 과제를 시간을 기준으로 오름차순 정렬한다. 2) 첫 시간부터 1..

[PS] BOJ16236 아기상어 ( 구현 ) with JAVA

16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net ◎ 문제풀이 문제요약 : 2차원 배열에서 아기상어가 상하좌우로 이동하여 가장 가까운(가장 우선순위가 높은) 먹이를 먹을 때, 먹이를 더이상 먹지 못하고 엄마상어를 부를 때까지 걸리는 시간을 구하라. 문제풀이 : 상하좌우로 이동하며 가장 가까운 먹이를 찾는다는 점에서 최단거리를 구하는 BFS를 떠올렸다. BFS까지는 떠올렸으나 일반적인 BFS 코드로는 먹이를 먹는 우선순위를 적용하기 힘들었다. 일반큐가 아닌 우선순위큐를 사용하여 조건에 맞는 가장 가까운 먹이..

[PS] BOJ15686 치킨 배달 ( 구현 ) with JAVA

15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net ◎ 문제풀이 2차원 배열로 치킨집과 집의 위치가 좌표로 주어질 때, 집과 치킨집의 거리의 총합이 최소인 치킨집 M개를 선별하고, 치킨집 M개와 집 사이 거리의 총합이 최소일 때의 거리를 구하는 문제이다. 치킨집도 최대 13개이니 무식하게 푸는 것이 좋겠다고 생각했다. 1) 치킨집 M개 조합을 모든 경우를 완전탐색한다. ( DFS ) 2) 모든 경우의 조합과 집 사이의 치킨거리를 구한 뒤, 가장 최소인 치킨거리를 출력한다. N개 중이 M개의 조..

[PS] BOJ18111 마인크래프트 ( 구현 ) with JAVA

18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net ◎ 문제풀이 땅을 평탄화 하는데 최소시간이 걸리는 높이와 시간을 구하는 문제이다. 요구하는 조건이 많아 처음에는 막막했지만 다시 생각해보니 쉬운 문제였다. 최고높이와 최저높이의 사이 높이 하나하나의 평탄화 시간을 구한 다음 비교하여 최소시간과 높이를 구하면 되었다. 높이도 최대 256이고 가로세로 최대 500x500이니 삼중for문을 만들어도 최대 64만번 연산한다. 그러므로 시간복잡도에 걸리지 않는다. ◎ 코드 import java.io.*; import ja..

[PS] Programmers - k진수에서 소수 개수 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/92335 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ◎ 문제풀이 n = > k진수로 바꾸었을때, 구분자 0으로 구분되는 소수P의 개수를 구하는 문제이다. 이를 3가지 단계로 나누어 보았다. 1. k진수로 바꾸라. 2. 구분자 0으로 분리하라. 3. 소수 여부를 확인하라. 주의) K진수 안의 십진수를 정수로 변환할 때, Integer 범위를 넘을 수 있으므로 Long 자료형을 사용한다. ◎ 코드 import java.util.*; import jav..

[PS] Programmers - 신고 결과 받기 with JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/92334 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ◎ 문제풀이 신고에 대한 입력정보가 주어질 때, 신고자에게 가는 메일의 개수를 구하는 문제이다. 문제를 풀때, 두가지를 신경썼다. 1) 유저와 인덱스를 1대1로 매핑하기 위해, HashMap 자료구조를 사용하였다. 2) 신고 객체에서 신고대상의 신고자의 중복을 방지하기 위해, HashSet 자료구조를 사용하였다. ◎ 코드 import java.io.*; import java.util.*; //신고..

[PS] BOJ20055 컨베이어 벨트 위의 로봇 ( inplementation ) with JAVA

20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net ◎ 문제풀이 문제이해력과 구현력이 필요한 문제였다. 자료구조는 2개를 만들어 준다. 1) 컨베이어 벨트 ( int 배열 , 내구도 ) 2) 로봇위치 ( boolean 배열, 로봇 존재 여부 ) 문제에 주어진 단계에 따라 차근히 구현하면 된다. 1) 벨트 이동하기 벨트가 한 칸 움직일때마다, 우측으로 값을 복사한다. 맨끝은 가장 처음으로 복사한다. 벨트 자료구조를 우측으로 값을 복사하였다. 벨트 위에 있는 로봇도 함께 우측으로 이동한다. 2) ..

[CodingTest] 게임 개발 ( 구현 )

◎ 문제 현민이는 게임 캐릭터가 맵 안에서 움직이는 시스템을 개발 중이다. 캐릭터가 있는 장소는 1 X 1 크기의 정사각형으로 이뤄진 N X M 크기의 직사각형으로, 각각의 칸은 육지 또는 바다이다. 캐릭터는 동서남북 중 한 곳을 바라본다. 맵의 각 칸은 (A, B)로 나타낼 수 있고, A는 북쪽으로부터 떨어진 칸의 개수, B는 서쪽으로부터 떨어진 칸의 개수이다. 캐릭터는 상하좌우로 움직일 수 있고, 바다로 되어 있는 공간에는 갈 수 없다. 캐릭터의 움직임을 설정하기 위해 정해 놓은 매뉴얼은 이러하다. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향(반시계 방향으로 90도 회전한 방향)부터 차례대로 갈 곳을 정한다. 캐릭터의 바로 왼쪽 방향에 아직 가보지 않은 칸이 존재한다면, 왼쪽 방향으로 횐전한 다음 ..

[CodingTest] 왕실의 나이트 ( 구현 )

◎ 문제 행복 왕국의 왕실 정원은 체스판과 같은 8 × 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다 나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동할 수 있다 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 이처럼 8 × 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하라. 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a 부터 h로 표현한다 c2에 있을 ..