728x90

Algorithm

    [SW Expert] [SW Test 샘플문제] 1767번 프로세서 연결하기 (Java)

    SW Expert [SW Test 샘플문제] 1767번 프로세서 연결하기 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV4suNtaXFEDFAUf 상시 SW 역량테스트를 신청하기 전에 샘플문제로 풀어볼 수 있는 '프로세서 연결하기'이다. 최대한 많은 코어를 연결했을 때, 전선의 길이를 최소로 하는 값을 구하면 된다. bfs로 할지, dfs로 할지 고민을 하다가 bfs로 하면 배열 복사에 시간과 메모리 소모가 너무 많을 듯 하여 dfs로 풀이하게 되었다. 입력을 받을 때 코어의 위치들을 ArrayList에 저장한다. 그 뒤 코어의 위치에서 상하좌우로 연결이 가능한지 체크를 한다. (isConnect 함수) 연..

    [백준] 1022번 소용돌이 예쁘게 출력하기 (Java)

    백준 1022번 소용돌이 예쁘게 출력하기 : https://www.acmicpc.net/problem/1022 1022번: 소용돌이 예쁘게 출력하기 첫째 줄에 r1, c1, r2, c2가 주어진다. 모두 절댓값이 5000보다 작거나 같은 정수이고, r2-r1은 0보다 크거나 같고, 49보다 작거나 같으며, c2-c1은 0보다 크거나 같고, 4보다 작거나 같다. www.acmicpc.net 이 문제의 포인트는 배열 선언을 어떻게 하느냐이다. r1, r2, c1, c2는 절댓값이 5000 이하이므로 사이즈가 10000짜리인 2차원 배열을 선언하면 모든 값을 담을 수 있다. 하지만 이런 식으로 코드를 짜면 무조건 메모리 초과가 뜨게 된다. 따라서 배열 선언을 상황에 맞게 유동적으로 해야한다. 문제 조건 중에 ..

    [백준] 15685번 드래곤 커브 (Java)

    백준 15685번 드래곤 커브 : https://www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커브의 시작 점, d는 시작 방향, g는 세대이다. (0 ≤ x, y ≤ 100, 0 ≤ d ≤ 3, 0 ≤ g ≤ 10) 입력으로 주어지는 드래곤 커브는 격자 밖으로 벗어나지 않는다. 드래곤 커브는 서로 겹칠 수 있다. 방향은 0, 1, 2, www.acmicpc.net 입력으로 드래곤 커브의 정보가 주어지면 1 x 1의 정사각형 개수가 몇 개인지 판단하는 문제이다...

    [SW Expert] [모의 SW 역량테스트] 2383번 점심 식사시간 (Java)

    SW Expert [모의 SW 역량테스트] 2383번 점심 식사시간 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5-BEE6AK0DFAVl 모의 SW 역량테스트 마지막 문제다. 정답률 50% 치고는 굉장히 어려웠다. 다시 한번 느끼지만... 정답률은 정말 숫자에 불과한 듯하다. 사람들의 위치와 계단의 위치, 길이가 주어지면 사람들이 모두 내려가는 데 걸리는 최소 시간을 구해야 한다. 문제를 딱 보자마자 이게 대체 무슨 소린가 싶었다. 문제는 이해됐지만 어떻게 구현해야 할지 감이 안 왔고, 코드를 작성하기까지 꽤 오랜 시간이 걸렸다. 우선 사람들과 계단 사이의 거리를 구해야 한다. int[2][m] 배열을 ..

    [SW Expert] [모의 SW 역량테스트] 5653번 줄기세포배양 (Java)

    SW Expert [모의 SW 역량테스트] 5653번 줄기세포배양 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRJ8EKe48DFAUo '배양 용기의 크기는 무한하다'는 조건 때문에 고민을 많이 했던 문제이다. 처음에는 세포들의 정보만 클래스로 저장하여 조작해보려 했지만, 같은 위치에 2개 이상의 세포들이 증식할 때 생명력 수치를 몇으로 해야 할지 고민을 하다가 접었다. 배열로 처리할 방법이 없을까 고민을 하다가 K 시간 동안 최대 얼마나 번져 나갈 수 있을지 계산하였다. 세포의 생명력 수치가 1이라고 치면 1번 증식하는데 2시간이 걸린다. 생명력 수치가 1인 세포가 가장 빨리 증식하게 되므로, K 시간..

    [SW Expert] [모의 SW 역량테스트] 5644번 무선 충전 (Java)

    SW Expert [모의 SW 역량테스트] 5644번 무선 충전 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRDL1aeugDFAUo 이번 문제 풀이에는 Index와 BC 클래스를 만들어서 사용했다. Index 클래스는 평소 자주 사용했던 클래스로 A, B의 위치를 나타낸다. BC 클래스는 문제에서 주어진 BC의 정보를 담는 클래스로 BC의 위치와 범위(range), 성능(power)을 변수로 가지고 있다. A와 B가 이동하는 정보를 배열로 저장한 뒤, for문으로 탐색하며 각 시간마다의 boolean[2][a]의 check 배열을 계산한다. (getCheck 함수) check 배열은 다음과 같은 형태를..

    [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개로 저..

728x90