728x90
전체 글

전체 글

    [SW Expert] [모의 SW 역량테스트] 5648번 원자 소멸 시뮬레이션 (Java)

    SW Expert [모의 SW 역량테스트] 5648번 원자 소멸 시뮬레이션 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRFInKex8DFAUo 모의 SW 역량테스트 중에 가장 낮은 정답률을 자랑하는 원자 소멸 시뮬레이션이다. 17%의 정답률 치고는 나름 할만했던 문제라고 생각한다. 가장 먼저 생각한 점이 '프로그램은 언제 종료되는가?'였다. 제약 사항 중에 원자들이 움직일 수 있는 좌표의 범위의 제한은 없다고 한다. 처음 생각했을 때, 좌표가 무한정으로 움직인다면 무한루프에 빠질 것 같았다. 하지만 조금 더 생각해보니 입력으로 주어지는 좌표는 -1000부터 1000 사이의 값이고, 그 밖으로 넘어가면 ..

    [SW Expert] [모의 SW 역량테스트] 4014번 활주로 건설 (Java)

    SW Expert [모의 SW 역량테스트] 4014번 활주로 건설 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeW7FakkUDFAVH 딱히 알고리즘이랄 거 없이 문제에서 요구하는 조건만 만족하면 풀리는 문제이다. 요즘 dfs, bfs 등 여러 알고리즘을 사용해 문제를 풀다가 이런 문제를 보게 되니 뭔가 신선했다. 문제에서 요구하는 조건만 맞춰주면 풀리지만, 그 조건 맞추는 게 생각보다 까다롭다. 아래의 사진처럼 2차원 배열로 입력을 받으면 체크해야 할 부분은 각 행과 열, 총 2n개의 1차원 배열이 된다. 이를 간단하게 해주기 위해 입력을 받을 때 정상적인 배열과, 행과 열을 뒤바꾼 배열 총 2개로 저..

    [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를 사용..

728x90