목록코테/백준 (7)
우당탕탕 개발일지

문제안전 지역은 잠겨있지 않은 지역의 덩어리임! 높이 = 4 >> 안전 지역 = 5높이 = 6 >> 안전 지역 = 4 안전역영의 최대 개 : 5 풀이2667번 문제에서 약간 조건이 추가된 문제였다. 덕분에 그때 코드 생각해보면서 문제를 풀어봤다. 1. 입력값 받기 & 최대 높이 구하기입력값을 받으면서 변수 m에 최대 값을 저장했다.비의 양에 대한 조건이 없었고 최대 높이 이상으로 오는건 다 동일한 값이기 때문...! m를 가지고 강수량별 안전 영역 수를 구한다. 2. 강수량별 안전 영역 개수 확인비가 안 오는 경우도 생각하여 높이는 0부터 m까지 반복문 실행함. 2-1. 변수 설정아래 변수들은 강수량별로 다른 정보를 가지고 있기에 해당 반복문에 변수를 선언 및 초기화를 진행했다.count >> 현..

문제과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. 풀이 최종 코드import queuedef findDanji(x, y): # 상, 뒤, 하, 앞 moveX = [0, -1, 0, 1] moveY = [1, 0, -1, 0] q = queue.Queue(..

Java -> Python파이썬 공부를 시작해볼려고 한다. 그래서 이번에는 파이썬으로 풀어보겠다.Java 풀이 풀이Java에서 Python으로 변경하면서 좀 어려웠던 부분을 정리해보도록 하겠다. 2차원 배열 선언miro 변수는 1차원 배열로 선언 후, list 값을 원소로 넣어 2차원 배열을 구현했다. check 변수는 처음에 [[False] * m] * n으로 선언했더니 원하지 않는 결과가 나왔다. check[0][0] = True 를 수행하면 모든 check[i][0] 값이 True로 변경되었다.[...] *n 를 하게되면 동일한 객체를 n개 생성하게 되어 모든 [i][0] 값이 변경된다고 한다. 따라서 다른 객체를 선언하고 싶을 때에는 for _ in range(n)를 통해서 생성해야 한다. ..

문제미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다.위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다. 입출력 예 풀이DFS, BFS 공부했지만 정말 감이 안왔다...그래서 다시! 블로그 보면서 풀이 방법을 읽으면서 코드를 짜봤다. 처음에는 깊이 우선 탐색인줄 알았으나 너비였다...! miro에는 입력값을 저장하고 check에는 방문했으면 true 값을 저장한다. 배열에 주어진 입..

문제그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 풀이DFS와 BFS 알고리즘을 몰라서 계속 대기업 코테 손도 못 댔다.... 그래서 이 알고리즘을 공부하기 위해 백준에서 문제를 찾았다. DF..

문제이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. (1개 이상 선택)예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다. 풀이1차 시도: 시간 초과n의 최대값이 100,000인데 2중 for문이라 시간초과가 발생하는 것 같다.Dynamic Programming 문제인데 이를 제대로 사용하지 못했다.public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; for (int i =..

문제풀이1번째 시도: 실패예시 문제는 다 맞았다...! 하지만 틀렸다고 나온다...import java.util.*;public class Main { private static int[][] aptFill(int[][] apt, int downk, int n) { if(apt[downk][n] == 0) { apt = aptFill(apt, downk-1, n); } for(int i=2; i 질문 게시물에 올린 답변에 반례를 알려주셨다. 덕분에 문제인 부분을 찾았다.1번 TC에서 답을 출력하고2번 TC에서 답을 구하는 과정에서 1번 TC에 수행했던 'apt[downk + 1][i]' 값에 apt[downk][i] 값을 계속 ..