분류 전체보기 795

백준 1918번 후위 표기식 (JAVA)

https://www.acmicpc.net/problem/1918 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 www.acmicpc.net 대략적인 개념은 가지고 있었는데 막상 구현하려하니 힘들었습니다. 저는 스택을 이용해 후위 표기법을 표현하였습니다. 먼저 우선순위는 (+ , -) < (* , /)입니다. 저는 다음과 같은 과정을 가지고 수행하였습니다. 1. 알파벳의 경우 StringBuilder에 바로 넣어주었습니다. 2. Stack의 top이 현재 연산자보다 우선순위가 낮은 연산자를 만날 때까지 pop하고 StringBuil..

알고리즘 2022.04.15

백준 2696번 중앙값 구하기 (JAVA)

https://www.acmicpc.net/problem/2696 2696번: 중앙값 구하기 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스의 첫째 줄에는 수열의 크기 M(1 ≤ M ≤ 9999, M은 홀수)이 주어지고, 그 다음 줄부터 이 수열의 원소가 차례대로 주 www.acmicpc.net 저는 해당 문제를 우선순위 큐 두개를 이용해 문제를 해결하였습니다. 먼저 작은 것들 중에 가장 큰 값을 루트로 가지는 우선순위 큐(1)와 큰 값들 중에 작은 값을 루트로 가지는 우선순위 큐(2) 두개를 사용했습니다. 처음에는 우선순위 큐(1)에 값을 넣고 그 다음부터는 해당 값이 우선순위 큐(1)의 루트 값 보다 크다면 다른 우선 순위 큐에 넣었습니다. 그리도 홀수 일..

알고리즘 2022.04.14

백준 2211번 네트워크 복구 (JAVA)

https://www.acmicpc.net/problem/2211 2211번: 네트워크 복구 첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 회선의 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 컴퓨터와 B번 컴퓨터가 통신 시간이 C (1 ≤ C ≤ 10)인 회선으로 연결되어 있다 www.acmicpc.net 저는 해당 문제를 다익스트라를 통해서 문제를 해결하였습니다. 저는 최소 개수의 회선만을 복구해야하고, 통신하는데 걸리는 시간이 원래 네트워크에서 통신하는 시간보다 커지면 안된다는 부분에서 생각을 하였습니다. 계속 생각보니 다익스트라 알고리즘을 적용하면 둘의 조건이 모두 해결되었습니다. 결국 n-1개의 회선을 연결해야하며, 다익스트라는 시작점에서 각각의 점에 최단 거리를 ..

알고리즘 2022.04.13

DTO의 사용 범위에 대한 생각

DTO란? - DTO는 Data Transfer Object로 계층 간 데이터 교환을 하기 위해 사용하는 객체입니다. - DTO는 DB에서 꺼낸 데이터를 저장하는 Entity를 가지고 만들어지고, Controller 같은 클라이언트 단과 직접 마주하는 계층에 직접 Entity를 전달하지 않고 DTO를 사용해 데이터를 교환합니다. Entity와 DTO를 분리하는 이유 - Entity가 외부에 노출되는 것을 막기 위함 Entity가 외부에 노출된다면 사용자 민감 정보 등이 노출될 수 있습니다. - 컨트롤러 메서드 파라미터에 Entity 그래도 사용 시 validation 코드가 Entity 코드에 섞이게 됩니다. 컨트롤러 같은 경우 입력에 대한 검증이 필요하다. 허나 컨트롤러에서 메소드 파라미터로 Entit..

개발 2022.04.12

프로그래머스 리틀 프렌즈 사천성 (JAVA)

https://programmers.co.kr/learn/courses/30/lessons/1836 코딩테스트 연습 - 리틀 프렌즈 사천성 리틀 프렌즈 사천성 언제나 맛있는 음식들이 가득한 평화로운 푸드 타운. 푸드 타운에서 행복하게 사는 리틀 프렌즈들은 마을에 있는 매직 스푼을 보물처럼 보관하고 있다. 매직 스푼은 재료만 programmers.co.kr 저는 BFS를 통해 해당 문제를 해결하였습니다. BFS를 depth를 2까지만 가져가서 한번 꺽일 수 있는 부분까지만 짝을 맞추도록 구현하였습니다. 알파벳순으로 없애야하기 때문에 알파벳 순으로 탐색을 하고, 만약 알파벳을 다 돌았는데도 짝을 맞출 것이 없다면 IMPOSSIBLE을 리턴하도록 하였습니다. import java.util.*; class So..

알고리즘 2022.04.12

백준 21609번 상어중학교 (JAVA)

https://www.acmicpc.net/problem/21609 21609번: 상어 중학교 상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록 www.acmicpc.net 저는 해당 문제를 BFS를 통해 문제를 해결하였습니다. BFS를 통해 블록의 집합을 구하였습니다. 블록의 집합을 구하면서 블록의 집합의 크기와 기준 블록와 무지개 블록(0) 개수를 리턴하여 어느 부분을 지워야하는지를 찾았습니다. 블록의 집합을 지울때도 BFS를 통해 기준 블록의 색깔과 무지개 블록(0)을 지워나갔습니다. 중력은 밑에서부터 빈공간을 가리키는 인덱스를 빈공간이 아닌 것과 스왑하고 ..

알고리즘 2022.04.11

프로그래머스 전력망을 둘로 나누기 (JAVA)

https://programmers.co.kr/learn/courses/30/lessons/86971 코딩테스트 연습 - 전력망을 둘로 나누기 9 [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] 3 7 [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] 1 programmers.co.kr 저는 해당 문제를 union find set을 이용하여 문제를 해결하였습니다. 간선을 하나씩 빼고 각각의 간선에 대해 점을 union 시키고, 마지막으로 각각의 영역을 개수를 세고 이를 빼 주었습니다. 영역의 개수를 샐때는 1번 점의 값과 같은 값은 1번영역, 다른 값을 가지면 2번 영역으로 하여 이 둘의 차를 구하였습니다. import java.util.*; c..

알고리즘 2022.04.10

프로그래머스 카드 짝 맞추기 (JAVA)

https://programmers.co.kr/learn/courses/30/lessons/72415 코딩테스트 연습 - 카드 짝 맞추기 [[1,0,0,3],[2,0,0,0],[0,0,0,2],[3,0,1,0]] 1 0 14 [[3,0,0,2],[0,0,1,0],[0,1,0,0],[2,0,0,3]] 0 1 16 programmers.co.kr 저는 해당 문제를 BFS를 이용하여 문제를 해결하였습니다. BFS를 한칸 이동과 ctrl을 눌렀을 때 끝까지 가거나 카드까지 가는 것을 둘 다 넣었고, 카드를 오픈하는 것도 넣고 BFS를 진행하였습니다. 카드 오픈은 빈칸이거나, 짝을 맞추려고 오픈 시킨 카드가 있다면 BFS에 넣지 않았습니다. 방문 체크는 Set을 이용하여 했습니다. Node의 toString 재정..

알고리즘 2022.04.09

백준 1756번 피자 굽기

https://www.acmicpc.net/problem/1756 1756번: 피자 굽기 월드피자 원주 지점에서 N개의 피자 반죽을 오븐에 넣고 구우려고 한다. 그런데, 월드피자에서 만드는 피자 반죽은 지름이 제각각이다. 그런가하면, 월드피자에서 사용하는 오븐의 모양도 몹시 www.acmicpc.net 저는 먼저 아래 층에 있는 너비가 위층보다 커도 결국 위층의 너비보다 큰 것이 들어갈 수 없다는 것을 알게되었습니다. 그래서 전처리를 하여 이전 층보다 크거나 같다면 그 너비가 몇개 있는지 확인하고 만약 이전 층보다 작다면 이전 층까지의 개수와 너비를 List에 넣고 다시 너비의 개수를 세어주었습니다. 다음으로는 들어온 너비를 보고 해당 List의 인덱스 역순으로 보면서 해당 너비보다 큰 너비를 찾고 Ma..

알고리즘 2022.04.08

백준 11967번 불켜기 (JAVA)

https://www.acmicpc.net/problem/11967 11967번: 불켜기 (1, 1)방에 있는 스위치로 (1, 2)방과 (1, 3)방의 불을 켤 수 있다. 그리고 (1, 3)으로 걸어가서 (2, 1)방의 불을 켤 수 있다. (2, 1)방에서는 다시 (2, 2)방의 불을 켤 수 있다. (2, 3)방은 어두워서 갈 수 없으 www.acmicpc.net 저는 BFS를 통해 해당 문제를 해결하였습니다. 저는 BFS를 통해 각각의 노드에서 불이 켜져있는 곳을 방문하고 방문한 곳에 스위치가 존재하면 불을 켰습니다. 저는 BFS를 돌면서 현재 노드를 없애지 않고 다시 집어 넣어 나중에 불이 켜졌을 때 그 방으로 갈 수 있도록 하였습니다. package BOJ.Simulation; import java..

알고리즘 2022.04.07