본문 바로가기

Algorithm46

[백준] 4179번 : 불! https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문 www.acmicpc.net 지훈이가 미로를 통과할때 or 통과하지 못하는 경우를 위한 탈출 조건만 유의해주자! 처음에는 bfs함수로 두지않고 main에서 로직을 처리하고 bool 변수를 통해 종료조건을 걸어주려고 했지만, 고려하지 못한 상황이 있었는지 틀렸다고 한다. 따라서, 함수로 따로 두고 종료시점에 바로 return cnt를 통해 해결하였다. #include #include using namespace .. 2021. 11. 23.
[백준] 13398번 : 연속합 2 https://www.acmicpc.net/problem/13398 13398번: 연속합 2 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net DP문제 이다. 연속된 수열의 최대합을 구하는 문제지만, 수열중 숫자 1개는 삭제 가능하다는 추가 조건이 있다. 따라서, 삭제 기회를 쓰는경우와 안쓰는 경우로 나눈 이차원 배열을 사용하였다. dp[i][0] : 0부터 i번째까지 존재하는 연속된 수열의 최대합 & 삭제 기회 남음 삭제 기회를 사용하면 안되기 때문에 i-1번째까지 최대합에 현재 값을 더한것과 현재값부터 다시 시작하는 경우 두가지 경우를 .. 2021. 11. 22.
[백준] 2138번 : 전구와 스위치 https://www.acmicpc.net/problem/2138 2138번: 전구와 스위치 N개의 스위치와 N개의 전구가 있다. 각각의 전구는 켜져 있는 상태와 꺼져 있는 상태 중 하나의 상태를 가진다. i(1 < i < N)번 스위치를 누르면 i-1, i, i+1의 세 개의 전구의 상태가 바뀐다. 즉, 꺼져 www.acmicpc.net N=100000이기때문에 모든 전구에 대해서 스위치를 킬지 말지 고려하면 풀수 없다. O(n)만에 풀어야하는 문제다. 처음에 생각했던 로직은 메모리초과가 났고, 효율적인 로직이 생각나지 않아 결국 블로그(https://staticvoidlife.tistory.com/143)를 참고하여 풀었다. 이 문제는 2가지 케이스로 나누어 풀어야한다. 1. 0번째 전구를 키고 시작.. 2021. 11. 18.
[백준] 14502번 : 연구소 (삼성 SW 역량 테스트) https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net #include #include #include #include using namespace std; int map[8][8]; int map_cp[8][8]; int dx[4] = { -1,1,0,0 }; int dy[4] = { 0,0,-1,1 }; int N, M; int ans=0; vector virus; void bfs() { queue q; for (int i = 0; i < virus.size(.. 2021. 11. 2.
[프로그래머스] N으로 표현 (JAVA) https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr import java.util.*; class Solution { int result=Integer.MAX_VALUE; int A; void solve(int n, int cur, int cnt){ if(cnt>8) return; if(cur==n) { result=Math.min(result,cnt); return; } int temp=A; for(int i=1; i 2021. 10. 16.
[백준] 구간 합 구하기 5 (C++) https://www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net #include using namespace std; int N, M; int map[1025][1025]; int dp[1025][1025]; int main() { ios_base::sync_with_stdio(false); cout.tie(NULL);cin.tie(NULL); cin >> N >> M; for (int i = 1; i map[i][j.. 2021. 10. 8.