반응형

구현 33

[G4] 백준 2239번 스도쿠 C++ 백트래킹, 구현

리뷰 문제를 제대로 읽지 않아 대각선까지 일치해야 하는줄 알았다.처음엔 해쉬 + Find를 통해 풀어야 하나 고민했는데 깊게 생각하지 않고 열, 행, 그룹으로 방문처리 하며 재귀를 사용하면 된다. 너무 어렵게 생각하지 말자https://www.acmicpc.net/problem/2239 문제 풀이전역 변수lst : 맵 정보를 나타낼 정수형 2차 배열cnt : 맵에 남아있는 0의 개수를 체크할 변수flag : 스도쿠 퍼즐이 완성되었는지 체크할 변수cols : 현재 행 기준 모든 열의 방문처리를 체크할 정수형 2차 배열rows : 현재 열 기준 모든 행의 방문처리를 체크할 정수형 2차 배열groups : 3*3 크기의 그룹 내의 방문처리를 체크할 정수형 3차 배열 9 * 9 크기의 for문을 개행해 준다 처..

[G1] 백준 13460번 구슬 탈출 2 C++ BFS, 구현, 시뮬레이션, 너비 우선 탐색

리뷰 설계를 하지 않고 무작정 덤볐다가 호되게 당한 문제, 구현과 시뮬레이션은 둘째치고 생각 못하고 있던 조건들이 많아서 애를 먹었다, 해당 문제를 풀기 전에 문제에 대한 조건을 한번 쭉 정리하는걸 추천한다.https://www.acmicpc.net/problem/13460 문제 풀이전역변수n, m : 2차원 맵 상 행과 열의 크기를 저장할 변수sx1, sy1, sx2, sy2 : 빨간색 구슬과 파란색 구슬의 x, y좌표를 저장할 변수lst : 맵 정보를 저장할 문자열 배열, 최대 크기가 10이므로 10만큼의 크기를 지정해 주었다.v : 방문 처리를 할 4차원 정수 배열, 각각의 요소에 sx1, sy1, sx2, sy2의 위치 저장, 맵의 크가보다 1크게 초기화dx, dy : 4방향 탐색을 위한 방향 배..

[G2] 백준 1400번 화물차 C++ 다익스트라, 최단 경로, 구현

리뷰경로 상에 신호등이 있어 기다렸다가 움직여야 하는 최단 경로 문제, 다른 문제와 다른점은 신호등의 방향이 정해져 있어 교차로에 진입하는 경우를 잘 분배해 주어야 했다.https://www.acmicpc.net/problem/1400 문제 풀이행 범위n, 열 범위 m, 시작 좌표 sx, sy 도착 좌표 ex, ey, 방향 배열, 맵 정보 lst배열을 전역 변수로 세팅한다.우선 순위 큐에서 사용할 Pos구조체를 정의하고, compare함수도 넣어준다.신호등 정보를 받을 구조체 Light를 정의하고, 신호등 배열 lights를 60크기로 설정해 준다.main함수에서 무한루프를 실행하고 input함수에서 n, m이 0, 0이라면 while루프를 종료해 준다.input함수를 통해 n, m값을 받고 만약 n과 ..

[S4] 백준 26596번 황금 칵테일 C++ 해시를 사용한 집합과 맵

리뷰 5달만에 다시 덤볐으나 문제 조건을 제대로 읽지 않아 또 져버렸다... https://www.acmicpc.net/problem/26596 문제 풀이재료의 개수 m과 황금 비율을 비교할 gold_rate를 1.618로, 문자열, 정수로 이루어진 맵 dic를 초기화 해준다.m값을 입력 받고 m만큼 루프를 돈 뒤 재료명과 값을 입력받아 재료명을 키로 갖는 맵에 값을 더해준다.flag를 0으로 초기화 해주고 맵을 두개로 나누어 순회하며 특정 재료의 값 * 황금비율이 다른 재료의 값과 동일한지 찾아준다. 이때 재료가 동일한 경우에는 황금 비율로 인정하지 않는다.만약 황금 비율을 찾았다면 flag를 1로 변경한 후 break 처리를 해준다.flag가 1인 경우 Delicious! 를, 아닐 경우 Not De..

[S3] 백준 9017번 크로스 컨트리 C++ 구현

리뷰 10달만의 복수를 완료하였다, 확실히 10달 전보단 문제를 보는 시각이 많이 늘어난 것 같다.https://www.acmicpc.net/problem/9017 문제 풀이참여자의 수 n과 등수 정보 배열 lst, 팀 정보 구조체 Team과 해당 배열 teams를 전역 변수로 초기화 해준다.init 함수를 통해 팀 정보 teams 배열을 각 테스트 케이스 마다 초기화 해준다.input 함수를 통해 n값을 받고, 특정 팀이 들어온 등수와 팀의 총원, 5번째로 들어온 등수를 기록해 준다.solution함수를 통해 각 팀의 점수를 비교하여 가장 등수가 낮은 팀을 찾아준다.점수를 1부터 시작하여 팀의 총원이 6명이 이상인 경우만 등수를 기록해 준다.각 팀을 순회하며 총원이 6명 이상인 팀만 상위 4명의 등수를..

[G5] 백준 16935번 배열 돌리기 3 C++ 구현, 시뮬레이션

리뷰 배열을 돌리는 정석적인 문제 90도 회전과 상하, 좌우 반전 배열 그룹화 등이 포함되어 있다.https://www.acmicpc.net/problem/16935 달팽이 처럼 배열을 돌리는 문제보단 난이도가 쉬운 편인 것 같다.아래는 달팽이 처럼 배열을 순회하며 돌리는 문제 백준 17406번 배열 돌리기4 C++ 백트래킹, 구현, 시뮬레이션리뷰 완전 탐색을 통해 배열을 돌리는 경우의 수를 모두 실행하고 최적값을 찾는 문제회전을 하는 횟수인 k의 범위가 6으로 작아서 완전 탐색을 돌려도 시간이 크게 많이 걸리지는 않았다. httpszzzz955.tistory.com 문제 풀이행정보를 나타낼 변수 n, 열정보를 나타낼 변수 m, 회전 요청의 개수 r과 정수형 2차배열 lst를 전역변수로 세팅한다.inpu..

백준 12919번 A와 B 2 C++ 백트래킹, 재귀, 문자열

리뷰 시작 문자열이 특정 조건을 가진 문자열을 더해 도착 문자열로 변할 수 있는지 여부를 체크하는 문제https://www.acmicpc.net/problem/12919 문제 풀이문자열 a와 b를 입력 받고, b의 크기에서 a크기를 뺀 값을 limit으로 저장한다. 이는 백트래킹의 기저조건이 될 값이다.변수 flag를 0으로 초기화 하고 함수 bt에 매개변수 0을 전달하여 백트래킹을 시작한다. 이때 0은 재귀 단계를 나타낸다.백트래킹의 기저조건은 flag가 1일때와 level이 limit에 도달했을 때다, 이는 둘의 문자열의 길이가 동일할때를 의미한다.문자열 a에서 b로 가는 재귀 말고, 문자열 b에서 a로 가는 재귀를 실행해 줄 것이다.만약 문자열 b의 앞이 B라면 문자열을 뒤집은 후 맨 뒤의 B를 삭..

SWEA 5648번 [모의 SW 역량테스트] 원자 소멸 시뮬레이션 C++ 구현, 시뮬레이션

리뷰 방향 배열을 사용한 전형적인 시뮬레이션 문제 문제 풀이전역변수로 원자의 개수 n, 남은 원자의 개수 cnt, 정답을 출력할 ans, 맵 배열 lst, 방향 배열을 설정해 주었다.좌표의 범위는 -1000 ~ 1000이지만 -인덱싱을 방지하기 위해 +1000을 해준다.추가로 원자가 만나지 않고 지나치는 경우를 방지하기 위해 *2를 해준다. 즉, 좌표의 범위는 4000 * 4000이다.원자의 정보를 담을 구조체 Atom과 위치를 나타낼 구조체 Pos를 만들고 원자 벡터 atoms를 초기화해 주었다.init 함수를 통해 cnt, ans를 0으로 초기화 하고 atoms배열 및 맵 정보를 테케마다 초기화 해준다.input 함수를 통해 n값을 입력 받고 n개의 원자 정보를 atoms 벡터에 추가해 준 뒤 맵에 ..

백준 2573번 빙산 C++ BFS, 완전 탐색, 시뮬레이션, 구현

리뷰 큐를 사용하여 적절한 조건문과 BFS를 조합하여 풀었다.https://www.acmicpc.net/problem/2573 문제 풀이전역 변수로 n, m, ans = 0과 2차원 배열로 맵용 lst 및 섬 덩어리를 찾을 chk와 방향배열을 넣어주었다.좌표와 현재 값을 나타낼 Pos 구조체를 정의해 주고 Pos구조체 타입의 큐 q를 초기화 해주었다.input함수를 통해 n, m값을 입력 받고, 맵의 정보를 받아온다. 이때 빙산은 q에 저장해 준다.solution함수를 통해 시뮬레이션 및 전반적인 답을 도출해 낼 것이다.재귀를 통해 직관적으로 확인해도 되지만, 나는 그냥 while문을 통해 시간의 흐름을 나타냈다.time을 0으로 초기화 하고 while문을 항상 true로 실행한다.chk_island 함..

백준 15683번 감시 C++ 백트래킹, 구현, 시뮬레이션

리뷰 모든 CCTV가 바라볼 수 있는 모든 방향을 체크하고 사각지대가 제일 적은 케이스를 찾는 문제https://www.acmicpc.net/problem/15683 문제 풀이전역 변수로는 맵, 방향 배열과 행의 개수 n, 열의 개수 m, cctv의 개수 k, 정답을 출력할 ans를 설정했다.n과 m값을 받아오고 n * m의 맵을 받아온다. 이때 현재 들어온 값이 1이상 이라면 별도의 처리가 필요하다.입력값이 6인 경우 벽이므로 continue, 1 ~ 5 사이라면 CCTV이므로 cctv 배열에 추가해 준 뒤 k의 개수를 증가시킨다.이때 각 CCTV의 시야는 모두 다르므로 구조체 CCTV의 look에 각각의 시야각을 추가해 준다.CCTV들의 방향을 저장할 빈 벡터 dirs를 초기화 하고 level 0부터..

728x90
반응형