💡Problem Solving 182

[BOJ 14503] 로봇 청소기 (Java)

문제 https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 풀이 dfs + 구현 문제이다. 방문 체크를 하면서 로봇 청소기 작동 원리대로 코드를 구현하면 된다. 현재 방향에 따른 왼쪽 좌표와 후진 좌표, 회전 방향은 초반에 미리 정의 해두었다. (나중에 조건문으로 짜면 골치 아프당) 소스코드 package simulation; import java.io.BufferedReader; import java.io.InputStreamReader; imp..

[BOJ 14501] 퇴사 (Java)

문제 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 풀이 N의 범위가 작기 때문에 완전 탐색으로 접근하였다. 상담 건을 선택 한 후, profit을 증가하여 다음 가능한 상담을 선택한다. 상담 일수가 초과되거나 종료되었을 때의 profit의 합을 max값과 비교하여 갱신한다. 소스코드 package bruteforce; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BOJ14501 { public static int[] T, P..

[BOJ 2636] 치즈 (Java)

문제 https://www.acmicpc.net/problem/2636 2636번: 치즈 아래 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(에서 네모 칸에 X친 부분)에는 치즈가 놓 www.acmicpc.net 풀이 치즈 내부 구멍과 외부 공기 모두 0으로 표시되기 때문에 이를 구분해야 한다. 1. 내부 구멍과 외부 공기를 구분한다. 전체 맵의 가장 자리가 비어있기 때문에 첫 번째 좌표 0, 0에서 BFS하여 상하좌우 0인 좌표를 모두 3으로 변경해주었다. 즉, 외부 공기를 3으로 바꿔주었다. 아래 단계를 치즈가 사라질 때까지 반복한다. 2. 치즈의 공기 접촉면을 체크한다. 맵을 순회하면서 값이 3(외부 공기)일 때,..

[BOJ 4195] 친구 네트워크 (Java)

문제 https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net 민혁이는 소셜 네트워크 사이트에서 친구를 만드는 것을 좋아하는 친구이다. 우표를 모으는 취미가 있듯이, 민혁이는 소셜 네트워크 사이트에서 친구를 모으는 것이 취미이다. 어떤 사이트의 친구 관계가 생긴 순서대로 주어졌을 때, 두 사람의 친구 네트워크에 몇 명이 있는지 구하는 프로그램을 작성하시오. 친구 네트워크란 친구 관계만으로 이동할 수 있는 사이를 말한다. 풀이 union-fin..

[BOJ 14502] 연구소 (Java, Python)

문제 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하..

[BOJ 2529] 부등호 (Java)

문제 https://www.acmicpc.net/problem/2529 풀이 완전 탐색으로 풀었다. 재귀 함수를 호출한다. 1. 반복문을 이용하여 숫자를 선택한다. 2. 선택한 숫자에 대해 방문 체크를 한다. (visited 배열 사용) 3. 부등호 연산에 부합하는지 체크한다. 4. 선택한 숫자에 대해 방문을 추가한 후, 지금까지 저장해온 문자열에 선택한 숫자를 붙여서 재귀 함수를 호출한다. 5. 재귀 함수의 호출 횟수가 부등호의 개수+1 이 되었을 때, 현재까지 선택한 숫자의 값에 따라 Min, Max를 갱신한다. 소스코드 package bruteforce; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Inpu..

[BOJ 15686] 치킨 배달 (Java, Python)

문제 https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 5 2 0 2 0 1 0 1 0 1 0 0 0 0 0 0 0 2 0 0 1 1 2 2 0 1 2 0은 빈 칸, 1은 집, 2는 치킨집이다. (2, 1)에 있는 집과 (1, 2)에 있는 치킨집과의 거리는 |2-1| + |1-2| = 2, (5, 5)에 있는 치킨집과의 거리는 |2-5| + |1-5| = 7이다. 따라서, (2, 1)에 있는 집의 치킨 거리는 2이다. (5,..

[BOJ 10217] KCM Travel (Java)

문제 https://www.acmicpc.net/problem/10217 10217번: KCM Travel 각고의 노력 끝에 찬민이는 2014 Google Code Jam World Finals에 진출하게 되었다. 구글에서 온 초대장을 받고 기뻐했던 것도 잠시, 찬찬히 읽어보던 찬민이는 중요한 사실을 알아차렸다. 최근의 대세 www.acmicpc.net 풀이 다익스트라 알고리즘을 사용하여 풀 수 있다. 보통 최소 거리(시간)을 저장할 배열로 1차 배열을 사용하지만 여기서는 비용을 고려해야 하므로 2차 배열로 생성 하여 사용한다. 소스코드 package dijkstra; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io..

[BOJ 14716] 현수막 (Java)

문제 https://www.acmicpc.net/problem/14716 14716번: 현수막 혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇 개인지 출력하여라. www.acmicpc.net 8 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 1 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0..

[프로그래머스] 코딩테스트 고득점 Kit (Java)

해시 완주하지 못한 선수 (Lv1) 더보기 import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; HashMap map = new HashMap(); for(String name : participant){ if(map.get(name) == null){ map.put(name, 1); } else { int cnt = map.get(name) + 1 ; map.put(name, cnt); } } for(String name : completion){ int cnt = map.get(name) + 1 ; map.put(name, cnt);..