본문 바로가기

분류 전체보기

(248)
[Python] 백준 2644번 : 촌수계산 (S2) - DFS&BFS 필수문제1 #문제 www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1≤n≤100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어진 www.acmicpc.net #풀이 & 학습한 내용 인접리스트로 그래프를 저장한 뒤에, 출발점에서 도착점까지의 최단경로를 계산하는 문제입니다. 가중치 없는 간선을 가진 최단경로는 bfs를 이용하면 됩니다. #소스코드 from collections import deque #큐 사용하기 위해 def bfs(q): while q: v=q.popleft() now_v=v[0] #현재의 vertex count=v[1] #현재의..
[Python] 백준 1707번 : 이분 그래프 (G4) - DFS&BFS단계별11 #문제 www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K(2≤K≤5)가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V(1≤V≤20,000)와 간선의 개수 www.acmicpc.net #풀이 & 학습한 내용 "그래프 순회를 통해 이분 그래프를 판별하는 문제"입니다. 이분 그래프를 판정하는 방법으로 인접한 vertex가 서로 다른 두 가지 색으로만 그래프가 칠해진다는 점을 이용하면 됩니다. 이때, 그래프가 연결 그래프라는 조건이 없으므로, disconnected graph에 대해서도 고려하며 문제를 풀어야 합니다. input()을 쓰면 PyPy3에서는 통과되지만 Python..
[Python] 백준 7562번 : 나이트의 이동 (S2) - DFS&BFS단계별10 #문제 www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net #풀이 & 학습한 내용 "나이트를 목적지까지 이동시키는 최소이동횟수"를 구하는 문제입니다. bfs로 최소경로를 구하면 답을 구할 수 있으며, visited 리스트를 따로 선언해주어 이미 방문한 곳은 큐에 넣지 않도록 구성해야 시간초과에 걸리지 않습니다. #소스코드 from collections import deque #큐 사용하기 위해 dx=[2,2,-2,-2,1,1,-1,-1] dy=[1,-1,1,-1,..
[Python] 백준 2206번 : 벽 부수고 이동하기 (G4) - DFS&BFS단계별9 #문제 www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net #풀이 & 학습한 내용 "현재 상태"를 정점으로 표현하여 그래프를 만들고 최단거리를 구하는 문제입니다. bfs로 최단거리를 구하는 미로찾기 문제에서, 벽을 하나 부술 수 있다는 옵션이 추가되었습니다. 이때 방문여부를 판단하는 visited를 벽을 부순 케이스와 벽을 안 부순 케이스로 나누어 따로 관리해주어야 하는 것이 이 문제의 핵심입니다. velog.io/@jengyoung/b..
[Python] 백준 1697번 : 숨바꼭질 (S1) - DFS&BFS단계별8 #문제 www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net #풀이 & 학습한 내용 "또 다른 BFS 최단거리 연습문제"입니다. BFS를 통해 가장 최소횟수를 구해주며, 현재위치의 범위와 방문여부로 중복을 제거해야 메모리초과에 걸리지 않고 문제를 해결할 수 있습니다. #소스코드 from collections import deque #큐 사용하기 위해 def bfs(q): while q: #K위치에 도달할 때까지 계속 반복(도달불가능한 경..
[Python] 백준 7569번 : 토마토 (S1) - DFS&BFS단계별7 #문제 www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net #풀이 & 학습한 내용 supremo7.tistory.com/207?category=874979의 3차원 버전 문제입니다. 여기서 정말 주의해야 될 점은 Z방향으로 리스트를 참조할 때 tomatoes[위아래][가로][세로]로 Z값이 맨 앞에 온다는 점입니다. 이 부분을 잘 생각하면서 코드를 짜야 합니다. #소스코드 from collections import deque #큐 사용하기..
[Python] 백준 7576번 : 토마토 (S1) - DFS&BFS단계별6 #문제 www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net #풀이 & 학습한 내용 "BFS로 토마토를 익히는 문제"입니다. bfs를 시작하기 전에 익은 토마토들을 먼저 모두 큐에 넣고 수행하는 것이 핵심입니다. 그리고 bfs가 끝나고 큐가 모두 비워지면 익을 수 있는 토마토는 모두 익은 것이므로, bfs이후에 안익은 토마토가 있는 지 확인하여 모두 익히는 것이 불가능한지 여부를 확인해주면 됩니다. #소스코드 from collections impo..
[Spring 입문] 회원 관리 예제 - 백엔드 개발 - 회원 객체, 회원 리포지토리 인터페이스, 회원 리포지토리 메모리 구현체 코드를 작성합니다. - 개발한 기능을 테스트할 때 자바의 main메소드나 웹 애플리케이션의 컨트롤러를 이용할 수 있는데 이는 반복 실행이 어렵고, 여러 케이스를 한번에 실행하기 어렵습니다. - 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결합니다. - 테스트는 순서에 상관없이 서로 의존하지 않고 실행되어야 합니다. 각 테스트가 끝난 뒤 정보를 지워주는 것이 좋습니다. - service폴더에 회원 서비스에 대한 코드를 작성합니다. - 테스트의 함수이름은 과감히 한국말로 지어도 좋습니다. - given, when, then 주석을 적어주면 도움이 많이 됩니다.