728x90

Algorithm

    [SW Expert] [모의 SW 역량테스트] 4013번 특이한 자석 (Java)

    SW Expert [모의 SW 역량테스트] 4013번 특이한 자석 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeV9sKkcoDFAVH 비트 마스크를 사용해서 풀어본 첫 문제다. 톱니바퀴의 정보를 입력받을 때 int형으로 입력받았고, 회전할 때는 시프트 연산자를 활용하여 회전하였다. 하지만... 굳이 비트 마스크를 사용할 필요가 있었을까 싶다. 정답을 맞힌 후에 다른 사람들의 코드를 보니 비트 마스크를 사용한 사람은 거의 없었다. 처음 사용해보는 개념이다 보니 익숙지 않았고, 시간도 꽤나 오래 걸렸다. 새로운 개념을 경험했다는 것에 의의를 두어야겠다. 인접 톱니바퀴를 회전할 때는 Queue를 사용했다. ..

    [SW Expert] [모의 SW 역량테스트] 2112번 보호 필름 (Java)

    SW Expert [모의 SW 역량테스트] 2112번 보호 필름 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu 지난 주 화요일에 스타트와 링크 문제를 풀면서 처음으로 조합 알고리즘을 공부했다. 그동안 스타트와 링크 문제 뿐 아니라 가르침 문제에서도 조합 알고리즘을 사용했다. 이번 보호 필름도 조합 알고리즘을 사용해서 풀게 되었다. 이번 문제에서는 총 7개의 함수를 작성했다. 그 중에서 메인이 되는 함수는 comb와 check 함수이다. 나머지 함수는 코드만 봐도 바로 알 정도로 간단한 함수이다. comb 함수는 총 d개의 행 중에 r개를 뽑는 함수이다. 위에서 언급한 스타트와 링크..

    [SW Expert] [모의 SW 역량테스트] 2105번 디저트 카페 (Java)

    SW Expert [모의 SW 역량테스트] 2105번 디저트 카페 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu 대각선 방향으로 디저트 카페를 탐색하는 문제이다. 특이한 조건이 있다면, 대각선 방향으로 이동하여 사각형 모양을 그리면서 출발할 카페로 돌아와야 한다는 점이다. 이러한 조건으로 탐색하는 범위는 절반으로 줄일 수 있다. 위와 같은 탐색 경로가 있다면, 절반으로 나눠서 위쪽 부분만 구한다면 아래쪽의 경로는 자동으로 나오게 된다. 이번 문제에서는 대각선으로 움직이기 때문에 dx, dy를 평소랑 다르게 지정해주었다. ↗, ↘, ↙, ↖ 의 순서로 0, 1, 2, 3으로 지정해주..

    [SW Expert] [모의 SW 역량테스트] 2117번 홈 방범 서비스 (Java)

    SW Expert [모의 SW 역량테스트] 2117번 홈 방범 서비스 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V61LqAf8DFAWu 마름모 구역 탐색 때문에 꽤나 고민했던 문제이다. 문제는 그렇게 어렵지 않다. 모든 경우의 수를 다 따져보면 되는 브루트 포스 문제이다. 프로그래머스의 자물쇠와 열쇠와 비슷한 문제이지만, 그보다 좀 더 복잡하다고 생각한다. 우선 마름모가 도시 밖으로 나갈 수 있으므로, 상하좌우로 패딩을 줘서 index가 도시 밖으로 나가지 않게끔 한다. 여기서는 전체 도시를 100 x 100 크기로 선언하여 (40,40)부터 입력을 받았다. 마름모를 탐색하는 방법은 여러가지가 있지만..

    [SW Expert] [모의 SW 역량테스트] 1949번 등산로 조성 (Java)

    SW Expert [모의 SW 역량테스트] 1949번 등산로 조성 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PoOKKAPIDFAUq 최대 등산로의 길이를 찾는 dfs + 브루트 포스 문제이다. 각 위치에서 최대 K만큼 지형을 깎을 수 있다. K만큼 지형을 깎을 수 있다는 조건이 어렵게 느껴질 수 있으나, 그냥 최대 등산로의 길이를 찾는 로직을 K번 반복해주면 된다. 전체적인 흐름은 아래와 같다. 1. 2중 for문을 사용해서 map에서의 index를 하나 지정한다. 2. 해당 위치에서 0~K만큼의 지형을 깎는다. 3. 미리 받아둔 최고점의 위치에서 dfs로 탐색한다. 4. 2번에서 깎은 지형만큼 다시..

    [백준] 6087번 레이저 통신 (Java)

    백준 6087번 레이저 통신 : https://www.acmicpc.net/problem/6087 6087번: 레이저 통신 문제 크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서 설치해야 하는 거울 개수의 최솟값을 구하는 프로그램을 작성하시오. 레이저로 통신한다는 것은 두 칸을 레이저로 연결할 수 있음을 의미한다. 레이저는 C에서만 발사할 수 있고, 빈 칸에 거울('/', '\')을 설치해서 방향을 90도 회전시킬 수 있다. www.acmicpc.net 생각보다 오래 걸렸던 문제이다. 최소 개수의 거울을 사용해서 두 'C'를 연결하면 된다. bfs를 사용..

    [SW Expert] [모의 SW 역량테스트] 1953번 탈주범 검거 (Java)

    SW Expert [모의 SW 역량테스트] 1953번 탈주범 검거 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpLlKAQ4DFAUq bfs를 많이 해봐서 그런가 이제 이런 유형의 문제는 익숙한 듯하다. Queue에 탈주범이 위치해 있는 좌표값을 넣는다. 탈주범이 방문했던 곳은 다시 넣지 않으므로, 탈주범이 해당 시간동안 가장 멀리 갈 수 있는 곳의 좌표가 들어가게 된다. 본 문제에서는 특이한 조건이 있었는데, 파이프의 종류에 따라 갈 수 있는 곳이 달라진다. 파이프를 연결하기 위해서 해당 위치에서 파이프가 연결된 곳의 정보를 status로 지정해줬다. 북쪽부터 시작하여 시계방향으로 0, 1, 2, 3..

    [SW Expert] [모의 SW 역량테스트] 5656번 벽돌 깨기 (Java)

    SW Expert [모의 SW 역량테스트] 5656번 벽돌 깨기 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRQm6qfL0DFAUo 정답률 보고 들어갔다가 큰 코 다쳤던 문제이다. dfs와 bfs를 함께 적용해야 한다. 구슬을 N번 쏠 수 있고, 최대한 많은 벽돌을 깨야 하기 때문에 모든 경우의 수를 확인해봐야 한다. 전체적인 흐름으로는, 0. 초기에 Queue에 int[][] map을 담는다. 1. Queue에서 map을 꺼낸 뒤, 0번째 행부터 우측으로 하나씩 움직이며 구슬을 떨어뜨린다. 2. 구슬이 떨어진 벽돌을 기준으로 깨질 수 있는 모든 벽돌을 제거한다. 3. 남아 있는 벽돌들을 밑으로 떨어뜨..

728x90