본문 바로가기

Algorithm159

#1004 어린 왕자 # 문제 # 입력 및 출력 # 풀이 출발점과 도착점이 같은 원 안에 있다면 해당 행성의 진입/이탈이 필요 없기 때문에 그냥 넘어가고 출발점과 도착점 중 한 곳만 어떤 원 안에 존재한다면 cnt 변수 증가 어떤 원 안에 출발점과 도착점 모두 존재하지 않는다면 그냥 넘어감 #include using namespace std; int main() { int T, x1, x2, y1, y2, n, cx, cy, r; cin >> T; while (T--) { int cnt = 0; cin >> x1 >> y1 >> x2 >> y2 >> n; while (n--) { cin >> cx >> cy >> r; int de = (x1 - cx)*(x1 - cx) + (y1 - cy)*(y1 - cy); // 어떤 행성.. 2022. 6. 24.
#1051 숫자 정사각형 # 문제 # 입력 및 출력 # 풀이 정사각형 최대 한 변의 길이(len) = min(N, M) len이 1이 될 때까지 len 길이를 줄여가면서 가장 큰 사각형을 찾음 #include using namespace std; int sq[50][50]; int N, M, len; void input() { char c; for (int i = 0; i > c; sq[i][j] = c - 48; } } } bool check(int x, int y) { bool c = true; if (sq[x][y] != sq[x][y + len]) c = false; if (sq[x][y] != sq[x + len][y]) c = fals.. 2022. 6. 23.
#1074 Z # 문제 # 입력 및 출력 # 풀이 // 시간초과 코드 #include #include using namespace std; int N, r, c, cnt = 0; int dx[4] = { 0,0,1,1 }; int dy[4] = { 0,1,0,1 }; void rec(int x, int y, int n) { if (n == 1) { for (int i = 0; i > r >> c; rec(0, 0, N); } 처음에 제출했던 코드가 위 코든데 모든 배열을 재귀적으로 돌기 때문에 시간 초과가 나온 것 같다 보니까 모든 사분면을 전부 조회할 필요는 없다고 해서 조건문을 걸어서 반복 횟수를 줄이고자 했.. 2022. 6. 22.
#1080 행렬 # 문제 # 입력 및 출력 # 풀이 처음에 이것저것 생각해보다가 내가 예제를 만들어보면서 풀이를 찾게 됐다 A행렬과 B행렬 값을 하나하나 비교하면서 다른 값을 찾으면 그 값으로부터 3x3행렬만큼 숫자를 뒤집고 다른 값을 찾을 때마다 count 해주면 된다 -1을 출력해야 하는 경우 1) 다른 값을 찾은 위치가 x, y라고 할 때 x+3이 n보다 크거나 y+3이 m보다 큰 경우 이 경우엔 인덱스 범위를 넘어가기 때문에 3x3 행렬만큼 숫자를 뒤집지 못함 2) nxm 만큼 반복문을 돌았는데 A와 B행렬이 같지 않은 경우 이 경우엔 A에서 B를 만들 수 없는 경우임 처음엔 n과 m이 3보다 작으면 무조건 -1을 출력하는것인줄 알았는데 n, m이 3보다 작아도 A행렬과 B행렬이 같은 경우라면 A행렬을 변경할 필.. 2022. 6. 21.
#2512 예산 # 문제 # 입력 및 출력 # 풀이 원래는 이분탐색 문제다 근데 나는 좀 다르게 풀었다 예산 요청을 하나씩 배당해주면서 최대 상한값을 찾도록 했다 #include #include using namespace std; priority_queue pq; int main() { int n, t, budget, sum = 0, maxv = 0; cin >> n; for (int i = 0; i > t; pq.push(t); sum += t; maxv = maxv > budget; if (sum > budget) { maxv = 0; for (int i = n; i > 0; i--) { int ul = budget / i; maxv = ul .. 2022. 6. 19.
#7576 토마토 # 문제 # 입력 및 출력 # 풀이 처음에 dfs로 풀려다가 날짜 계산이 제대로 되지 않는 문제가 생겼다 하루하루 지나면서 토마토가 퍼져나가는 문제기 때문에 bfs가 더 어울린다 #include #include #include using namespace std; queue q; int box[1001][1001]; // 토마토 상자 int visit[1001][1001]; // 방문 확인용 int dx[4] = { 0,-1,0,1 }; // 상하좌우 확인용 int dy[4] = { -1,0,1,0 }; int N, M, day = 0; void check() { // 토마토가 전부 익었는지 확인하고 결과 출력 int cnt = 0; for (int i = 1; i 2022. 6. 18.