문제https://www.acmicpc.net/problem/17135 풀이전형적인 삼성 코테의 빡 구현 문제입니다. 구현만 충실히 수행하면 되었는데, 삼성 SW 역량 문제의 구현 파트를 풀 때마다 느끼는 것은, 구현 시 중복된 데이터가 처리되는 것을 꼼꼼하게 잘 피해야하는 것 같습니다. 위 문제에서도 적의 수를 세는 부분이나, 적이 이동할 때 등등 for문을 돌며 배열에서만 구현을 처리하려하면 중복되는 데이터로 인해 원하는 결과가 나오지 않습니다. 그래서 저는 list 자료 구조를 따로 선언해 데이터를 저장하고, 후 처리를 해주는 식으로 풀이를 진행했습니다. 자세한 풀이 과정은 주석으로 대체했습니다. 아래는 소스 코드입니다.소스 코드import java.util.*;public class B..
Java
문제https://www.acmicpc.net/problem/10164 풀이고등학교? 때 배웠던 격자 상의 경로를 찾는 아이디어를 통해 문제를 해결했습니다. 격자 상의 출발지와 목적지를 정해 행렬을 만드는 방식으로 구현을 했습니다. 행렬을 만드는 메서드에는 시작점과 도착점, 그리고 특정 경로를 거치면 재귀를 통해 그 포인트부터 행렬을 생성할 수 있게끔 check 변수를 매개변수로 넣어주었습니다. 아래는 소스 코드입니다. 소스 코드import java.util.Scanner;public class B10164_격자상의경로 { static int N,M; static int[][] dp; public static void main(String[] args) { Scann..
문제https://www.acmicpc.net/problem/14890 풀이빡 구현 문제입니다. 아이디어는 시간이 있다면 쉽게 떠올려지는데, 조건을 꼼꼼하게 점검해야하는 문제였습니다. 우선 경사면을 두 가지로 나누어 볼 수 있습니다. 앞의 계단이 높아서 올라가야하는 경사면과 낮아서 내려가야하는 경사면입니다. 올라가야하는 경사면에서는 현재의 위치에서 뒤로 L만큼 체크하며 경사면을 놓을 수 있는지 체크를 해야하고, 내려가야하는 경사면에서는 현재의 위치 다음부터 L만큼 앞으로 체크하며 경사면을 놓을 수 있는지 체크합니다. 그리고 경사면이 있는 위치에서는 경사면을 놓으면 안됩니다. 경사면이 있는 위치에서 경사면을 놓는 경우는 내려갔다가 올라가는 경우입니다. 이때 경사면을 slope 배열에 저장해 체크했습니다..
정렬 알고리즘을 배우며 병합 정렬, 퀵 정렬 등 다양한 종류의 알고리즘에 대해 배웠다. 그렇다면 자바에서 자주 사용하는 Arrays.sort() 는 어떤 알고리즘으로 구현되어있을까? 구글링과 자바 내부코드를 보면, Arrays.sort는 듀얼 피봇 퀵소트를 사용한다라고 나와있다. Arrays.sort 메서드 내부를 들여다보면서, 듀얼 피봇 퀵소트란 무엇인지 그리고 범위에 따라 어떤 정렬 방식을 적용하는지를 알 수 있었는데, 그 부분에 대해 공유해보려 한다. Arrays.sort() 내부 들여다보기int[] arr = {1, 3, 4, 2, 1 ,7};Arrays.sort(arr)---result: {1, 1, 2, 3, 4 ,7} 보통 자바에서 배열을 정렬할 때, java.util.Arrays 클..
문제https://www.acmicpc.net/problem/13335 풀이큐를 이용한 구현으로 문제를 해결했습니다. while문을 돌며 queue에 어떤 값을 집어 넣을지에 대한 조건을 정의합니다. 만약, 다음 차례의 트럭의 무게와 현재 다리에 있는 트럭 무게가 최대 허용 무게보다 작다면, queue에 다음 트럭을 넣고 아니라면 queue에 0을 넣어줍니다. 그리고 매번 큐의 사이즈를 체크하여 큐의 크기 다리 길이와 같으면 queue에서 poll해줍니다. 큐에 값을 add, poll 할 때에는 현재 다리의 트럭 무게를 업데이트해주었습니다. 아래는 소스코드입니다.소스코드import java.util.ArrayDeque;import java.util.Queue;import java.util.Scan..
문제https://www.acmicpc.net/problem/11728 풀이두 가지 방법으로 문제를 해결할 수 있었습니다. Arrays.sort 메서드를 통해 단순히 구현하는 법과 포인터를 이용하는 법입니다. 포인터를 이용할 때에는, 두 배열에 대해 0부터 시작하는 포인터를 하나씩 두고, 둘 중 하나라도 포인터가 끝에 도달하면 while문을 멈춥니다. 그리고 끝까지 도달한 배열이 아닌, 다른 배열의 값을 모두 append 해주었습니다. 아래는 소스 코드입니다.소스 코드1. pointer 이용import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args) { ..