본문 바로가기

전체 글

(164)
[SWEA] JAVA - 2382. [모의 SW 역량테스트] 미생물 격리 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV597vbqAH0DFAVl SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 생각 미생물의 좌표가 겹쳤을때 가장 큰 미생물의 군집의 방향으로 방향을 다시 설정해야하고 그 다음 이동에서 미생물의 개수는 모두 누적된 미생물의 총 개수입니다. 이 문제를 풀면서 미생물의 타입에 대해 엄청나게 고민했습니다. 이와 비슷한 낚시왕 문제에서는 상어를 이동시키고 가장 큰 상어가 해당 좌표의 상어로 단순하게 대체되기 때문에 미생물 격리보다 쉽게 풀 수 있었습니다. 1. List, Queue ..
대칭키, 비대칭키(공개키) 정리 대칭키 암호화 방식은 암복호화에 사용하는 키가 동일한 암호화 방식이다. 공개키 암호화 방식은 암복호화에 사용하는 키가 서로 다르다. 따라서 공개키 암호화에서는 송수신자가 모두 한쌍의 키(개인키, 공개키)를 갖고 있다. 1. 대칭키 암호화와 복호화에 하나의 같은 키를 사용하는 암호 방식이다. 암호의 안정성은 키의 비밀 유지에 의존된다. 송신자와 수신자는 미리 안전한 채널을 통해서 암호 키가 먼저 교환되어있어야 한다. 계산 속도가 빠르지만 안전한 인증이 힘들고 전자 서명이 불가능하다. 1.1 블록 암호 평문을 고정된 크기의 블록으로 나누어 각 블록마다 암호화 과정을 수행하여 블록 단위로 암호문을 얻는 대칭키 암호 방식이다. 1.2 블록 암호 - AES (Advanced Encryption Standard) ..
[SWEA] JAVA - 2112. [모의 SW 역량테스트] 보호 필름 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 생각 행을 기준으로 약품을 주입한다, A를 주입한다, B를 주입한다 세가지 경우가 존재합니다. D개의 row에 이러한 세가지 상태가 적용되는 모든 경우를 탐색해야 합니다. 부분집합 개념을 사용하여 위의 세가지 상태를 재귀함수로 구현했습니다. 이때 map 상태배열을 직접적으로 수정하기 때문에 세개의 재귀 호출 다음 map 상태배열값을 원복해주는 작업이 필요합니다. 그 다음 base case에서는 내가..
[SWEA] JAVA - 1949. [모의 SW 역량테스트] 등산로 조성 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PoOKKAPIDFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 생각 가장 높은 봉우리에서부터 시작하여 가장 긴 경로를 찾는 문제입니다. 등산로를 만들때 현재위치보다 다음위치가 더 낮아야 등산로를 만들 수 있습니다. 이때 최장 등산로를 만들기 위해서 최대 K 값만큼 봉우리를 깎을 수 있지만 단 한번만 깎을 수 있습니다. 모든 경우를 탐색해야 하기 때문에 DFS 를 사용하여 완전탐색으로 문제를 풀었습니다. 제가 만든 재귀함수의 정의는 다음과 같습니다. solve(..
[백준] JAVA - 20058. 마법사 상어와 파이어스톰 https://www.acmicpc.net/problem/20058 20058번: 마법사 상어와 파이어스톰 마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c www.acmicpc.net 생각 1. 상태배열을 시계방향으로 90도 회전한다. 2. 인접한 얼음 영역이 3개 미만일 경우 현재 위치의 얼음을 -1 감소시킵니다. (이때 바로바로 값을 변경해주면 다른 값들에 영향이 가기때문에 변경할 좌표값을 큐에 넣어 한번에 처리했습니다.) 3. Q번만큼 1번~2번 작업을 반복한뒤 가장 큰 얼음영역을 BFS로 찾는다. 남아있는 얼음의 합을 구한다. 시계방향으로 90도 회전..
[백준] JAVA - 17471. 게리맨더링 https://www.acmicpc.net/problem/17471 17471번: 게리맨더링 선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다. www.acmicpc.net 생각 선거구를 두 그룹으로 나누고 나눈 그룹들은 해당 그룹 내부에서 서로 연결되어 있어야 합니다. 문제 풀이의 큰 흐름은 다음과 같습니다. - 두 그룹으로 나누는 모든 경우를 구한다. - 나눈 두 그룹이 각각 내부에서 서로 연결되어있는지 확인한다. - 두 그룹이 해당 그룹 내부에서 모두 서로 연결되어있다면 두 그룹의 인구 수 차이를 계산한다. 1. 두 그룹으로 나누는것은 재귀함수를 사용했습니다. 1 ~ N/2개가 될때..
[SWEA] JAVA - 1953. [모의 SW 역량테스트] 탈주범 검거 생각 파이프는 상하좌우 네가지 방향성을 가지고 있습니다. 파이프가 가질 수 있는 방향 상태의 조합을 비트마스킹으로 표현하여 상하좌우 -> 1111 과 같이 나타냈습니다. 즉, 상 : 1000, 하 : 0100, 좌 : 0010, 우: 0001 로 나타내었고 파이프의 형태에 따라 OR 연산으로 갈 수 있는 방향에는 비트를 1로 설정하여 초기화 시켰습니다. 탈주범의 시작위치로부터 주어진 시간까지 어떤 칸을 갈 수 있는지는 BFS 를 사용하여 문제를 풀었습니다. BFS 내부에서 다음칸으로 갈수있을지 체크를 할 때 파이프의 연결성을 체크하는 메소드를 만들었습니다. 갈려고 하는 칸과 현재의 방향값 비트를 파라미터로 받아 다음 칸으로 갈수있는지를 체크해줬습니다. 현재 방향값 비트가 1000일때 위쪽 방향을 나타내므..
[백준] JAVA - 2564. 경비원 https://www.acmicpc.net/problem/2564 2564번: 경비원 첫째 줄에 블록의 가로의 길이와 세로의 길이가 차례로 주어진다. 둘째 줄에 상점의 개수가 주어진다. 블록의 가로의 길이와 세로의 길이, 상점의 개수는 모두 100이하의 자연수이다. 이어 한 줄 www.acmicpc.net 생각 (0,0)에서 시작하여 직사각형을 시계방향으로 둘레를 쭉 펼쳐줬다고 생각하여 거리를 측정해줍니다. 상점의 좌표가 x이고 북쪽이면 거리는 x, 동쪽이면 거리는 C+x, 남쪽이면 C+R+(C-x), 서쪽이면 C+R+C+(R-x) 입니다. (0,0) ~ 상점거리와 (0,0) 동근이의거리를 시계방향만큼 측정해줬기 때문에 반시계방향으로 거리를 측정할때는 둘레 - 시계방향으로 측정한 거리값입니다. 각 상점의..