전체 글 280

[프로그래머스] 단어 변환 (c++) string, bfs

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이 방법변환이 가능한지 확인할 수 있는 함수가 필요하다 이를 위해 두 단어의 스펠링 개수 차이가 1이면 가능하다고 판단하는 canChange함수를 작성했다.그 후 일반적인 bfs함수를 통해 tartget 단어가 될 때까지 수행했다. #include #include #include #include using namespace std;bool canChange(string str1, string..

Algorithm 2024.09.15

[프로그래머스] 전력망을 둘로 나누기 (C++) bfs

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/86971?language=cpp 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이 방법문제를 보자마자 완전 탐색 + bfs로 풀이해야겠다고 생각이 들었다. 연결된 간선을 하나씩 끊어 가며 bfs로 두 구역의 차이를 구한 후 가장 작은 차이를 가지는 것을 저장해 두었다.간선을 끊는 방법은 간선을 돌며 선택된 간선에서 한쪽에서 bfs를 수행할 때 다른 한쪽 구역은 방문하지 않는 방법이다. 이렇게 양 쪽에서 각각 bfs를 수행한 후 두 지역의 차이를 ..

Algorithm 2024.09.14

[백준] 회장뽑기 2660번 (C++) bfs

출처 : https://www.acmicpc.net/problem/2660풀이 방법회장을 뽑기 위해선 완전 탐색 + bfs로 풀이하면 된다.각 사람을 돌아가며 모든 벡터를 초기화 하고 bfs를 진행한 후 가장 작은 점수인 사람을 선택하면 된다.#include #include #include #include using namespace std;int N;vector> graph;int bfs(int start) { int ret = 0; queue> q; q.push(make_pair(start, 0)); // 시작 점 추가하기 int visited[N+1]; for (int i = 0;i > N; graph.resize(N+1); while(true) { int a, b; cin >> a >> b..

Algorithm 2024.09.13

[백준] 톱니바퀴 14891번 (python) 구현

출처 : https://www.acmicpc.net/problem/14891 풀이 방법구현 문제이므로 문제 파악이 중요했다.구현해야 할 부분을 함수별로 하나씩 나누어 구현했다.또한 케이스를 나누는 것에 집중했다. 크게 만약 각 돌리기 명령에서 시작인 경우와 아닌 경우로 나누었다.돌리기 시작인 톱니바퀴양 끝에 있는 경우1번 톱니면 오른쪽만 4번 톱니면 왼쪽만 체크한다.중간에 있는 경우양 쪽을 다 확인한다.돌리기 시작이지 않는 톱니바퀴왼쪽만 확인오른쪽만 확인위와 같은 경우로 나눌 수 있다. 구현해야 할 함수를 생각해 보자  1. 톱니 돌리는 함수먼저 톱니 돌리기 위해 나는 톱니바퀴의 제일 위(12시 방향) 인덱스를 저장해 시계방향으로의 회전은 인덱스에 -1 반 시계방향은 +1을 해주고 % 8 연산을 통해 관..

Algorithm 2024.09.08

[백준] 주사위 굴리기 14499번 (python) 구현

출처 : https://www.acmicpc.net/problem/14499 풀이 방법간단한 구현 문제이다.각 주사위에서 저장된 수를 저장하기 위해 배열을 사용했다.2, 4, 1, 3, 5, 6 순서로 저장했다.그리고 주사위가 굴려졌을 때 어떻게 주사위의 눈금이 변화되는지 생각해 각 함수를 작성했다. 여기서 중요한 포인트는 주사위가 밖으로 나갔을 때 무시해야 하는 것이다.이때 만약 주사위를 먼저 굴리고 주사위를 이동시킨 후 좌표를 체크하고 롤백하게 된다면 주사위의 상하좌우가 변하기 때문에주사위의 좌표를 체크를 먼저 하고 난 후 주사위가 밖으로 나가지 않은 경우 주사위를 굴려야 한다. N, M, y, x, cnt = map(int, input().split())board = []dice = [0, 0, 0..

Algorithm 2024.09.03

[백준] 내려가기 2096번 (python) 원도우를 활용한 DP

출처 : https://www.acmicpc.net/problem/2096풀이 방법처음에는 일반적인 DP문제로 풀이하였다 max와 min은 함수만 다르게 사용하고 점화식은 똑같다.처음 풀이 방법dp[i][j] = i, j일 때 최대 포인트 ( 0 dp[i][0] = max(dp[i-1][0], dp[i-1][1]) + point[i][0]dp[i][0] = max(dp[i-1][0], max(dp[i-1][1], dp[i-1][2])) + point[i][1]dp[i][2] = max(dp[i-1][1], dp[i-1][2]) + point[i][2]최소일 때는 반대 이렇게 max일 때와 min일 때 반복문을 두 번 돌았다.이렇게 풀이하게 된다면 메모리 초과가 발생하게 된다. 그래서 윈도우를 활용해야하는..

Algorithm 2024.08.31

[백준] RGB거리 2 17404번 (python) DP 무조건적인 선택

출처 : https://www.acmicpc.net/problem/17404풀이 방법dp에서 문제를 dp[i][j]를 i번째에 j색을 선택했을 때 최소 비용으로 설정했다.  ( 0이렇게 설정 후 for 문을 1부터 N-1까지 돌며 각 경우에 대해 각 경우에 대해 dp[i][0]일 땐 dp[i-1][1], dp[i-1][2] 중 작은 값을 선택dp[i][1]일 땐 dp[i-1][0], dp[i-1][2] 중 작은 값을 선택dp[i][2]일 땐 dp[i-1][1], dp[i-1][0] 중 작은 값을 선택 후 자신의 돈 더하기위 과정을 해주면 된다. 여기서 추가적으로 고려해야할 점은 처음과 끝이 다르게 선택되어야 한다는 점이다.이를 위해 첫 선택을 강제하는 방법을 선택했다.for 0~2까지 돌며 현재 선택된 ..

Algorithm 2024.08.23

[백준] 암호 코드 2011번 (python) DP

출처: https://www.acmicpc.net/problem/2011 풀이 방법암호를 해독하는 방법에는 한 글자씩 하거나 두 글자를 묶는 경우 2가지 경우가 존재한다.DP알고리즘에서 dp[i]를 i번째 까지 가능한 경우의 수라고 가정한다면 만약 한 글자씩 끊어서 하는 경우라면 dp[i-1]의 경우의 수를 더해주면 된다. 만약 i-1번째 수와 i번 째 수를 묶는다고 가정하면 이때 경우의 수는 i-2번째 경우의 수와 같으므로 해당하는 경우의 수를 더해주면 된다.  dp의 인덱스를 i를 i번째 까지 가능한 수라고 한다면 dp[1]일 때 i-2는 -1 이 되므로 예상치 못한 결과가 나오게 된다. 그러므로 인덱스를 하나씩 +1 해서 i+1이 i번째 까지 가능한 경우의 수라고 했다. n = list(map(in..

Algorithm 2024.08.18

깃액션 오류

build 과정에서 gradle을 찾지 못해 발생했다.우리 프로젝트는 깃허브의 루트에 프로젝트가 바로 있는 것이 아닌 폴더로 한 번 더 감싸져 있었다.루트 디렉터리를 변경해 주어서 해결할 수 있었다.기존- name: Build with Gradle run: ./familing/gradlew clean build --exclude-task test 수정 후- name: Build with Gradle uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629 with: arguments: build build-root-directory: ./familing

카테고리 없음 2024.08.09