반응형

Algorithm Test 51

[백준] [삼성 SW 역량 테스트 기출 문제] 15683. 감시 (JAVA)

👁‍🗨 감시 이지 문제 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감시할 수 있는 방법은 다음과 같다. 1번 CCTV는 한 쪽 방향만 감시할 수 있다. 2번과 3번은 두 방향을 감시할 수 있는데, 2번은 감시하는 방향이 서로 반대방향이어야 하고, 3번은 직각 방향이어야 한다. 4번은 세 방향, 5번은 네 방향을 감시할 수 있다. CCTV는 감시할 수 있는 방향에 있는 칸 전체를 감시할 수 있다. 사무실에는 벽이 있는데, CCTV는 벽을 통과할 수 없다. CCTV가 감시할 수 없는 영역은 사각지대라고 한다. CCTV는 회전시킬 수 있는데, 회전은 ..

[백준] [삼성 SW 역량 테스트 기출 문제] 14891. 톱니바퀴 (JAVA)

⚙ 톱니바퀴 비트마스킹을 이용하여 해결하였다. 초반에 톱니들이 순차적으로 움직인다고 생각해서 문제가 이해되지 않았는데, 톱니가 돌아가기 전에 맞닿은 부분들을 체크하고, 한꺼번에 돌리면 된다 ! (자석을 생각해보면 알 수 있다. 자석은 동시에 반대쪽으로 멀어지지, 순차적으로 멀어지지 않는다.) 문제 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴가 1번, 그 오른쪽은 2번, 그 오른쪽은 3번, 가장 오른쪽 톱니바퀴는 4번이다. 이 때, 톱니바퀴를 총 K번 회전시키려고 한다. 톱니바퀴의 회전은 한 칸을 기준으로 한다. 회전은 시계 방향과 반시계 방향이 있고, 아..

[백준] [삼성 SW 역량 테스트 기출 문제] 14890. 경사로 (JAVA)

🚧 경사로 r-i 를 r=i 로 넣어놓고 이틀동안 반례 찾기 ...😊 이 또한 우리네들이 살아가는 하나의 생활 양식이겠죠 . . 문제 크기가 N×N인 지도가 있다. 지도의 각 칸에는 그 곳의 높이가 적혀져 있다. 오늘은 이 지도에서 지나갈 수 있는 길이 몇 개 있는지 알아보려고 한다. 길이란 한 행 또는 한 열 전부를 나타내며, 한쪽 끝에서 다른쪽 끝까지 지나가는 것이다. 다음과 같은 N=6인 경우 지도를 살펴보자. 이때, 길은 총 2N개가 있으며, 아래와 같다. 길을 지나갈 수 있으려면 길에 속한 모든 칸의 높이가 모두 같아야 한다. 또는, 경사로를 놓아서 지나갈 수 있는 길을 만들 수 있다. 경사로는 높이가 항상 1이며, 길이는 L이다. 또, 개수는 매우 많아 부족할 일이 없다. 경사로는 낮은 칸과 ..

[백준] [삼성 SW 역량 테스트 기출 문제] 14889. 스타트와 링크 (JAVA)

⚽ 스타트와 링크 백트래킹과 비트마스킹을 이용하여 해결하였다. 문제 오늘은 스타트링크에 다니는 사람들이 모여서 축구를 해보려고 한다. 축구는 평일 오후에 하고 의무 참석도 아니다. 축구를 하기 위해 모인 사람은 총 N명이고 신기하게도 N은 짝수이다. 이제 N/2명으로 이루어진 스타트 팀과 링크 팀으로 사람들을 나눠야 한다. BOJ를 운영하는 회사 답게 사람에게 번호를 1부터 N까지로 배정했고, 아래와 같은 능력치를 조사했다. 능력치 Sij는 i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치이다. 팀의 능력치는 팀에 속한 모든 쌍의 능력치 Sij의 합이다. Sij는 Sji와 다를 수도 있으며, i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치는 Sij와 Sji이다. ..

[백준] [삼성 SW 역량 테스트 기출 문제] 14888. 연산자 끼워넣기 (JAVA)

➗ 연산자 끼워넣기 어렵지 않으나 수의 범위(?)를 조심해야 하는 문제이다. 그나저나 삼성 시험장에서 제공하는 기본 IDE 이클립스인거 실화냐.. 인텔리제이 쓰다가 시험 환경에 좀 적응할 겸 이클립스 쓰니 새삼 UI가 구림을 느낀다. +자동완성 불편.. 문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄..

[백준] [삼성 SW 역량 테스트 기출 문제] 14503. 로봇 청소기 (JAVA)

👾 로봇 청소기 설명이 친절해서 그대로 구현만 잘 하면 되는 문제. 문제 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음과 같이 작동한다. 현재 위치를 청소한다. 현재 위치에서 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행한다. 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로..

[백준] [삼성 SW 역량 테스트 기출 문제] 14501. 퇴사 (JAVA)

🙋‍♀️ 퇴사 알고리즘 시간에 배웠던 Activity Selection 문제와 그 형태는 유사했다. 그러나 Activity Selection problem은 가중치가 없어서 Greedy 알고리즘으로 해결할 수 있지만, 이 문제는 각 activity마다 가중치가 달라서 DFS로 모든 경우를 탐색해줬다. 문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다. 각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다. N = 7인 경우에 ..

[백준] [삼성 SW 역량 테스트 기출 문제] 14500. 테트로미노 (JAVA)

🧩 테트로미노 처음에 BFS로 접근해서 두 가지 문제가 발생했다. 첫 번째로, 凸 모양을 처리하지 못하는 것.. (내 동년배들 다 볼록할 철 안다 🤭) 그래서 凸 요 모양만 따로 예외 처리해주었지만, 이제는 시간초과가 났다. ㅡ ㅡ 다른 사람의 풀이를 보니 DFS로 풀어주어야 시간초과가 나지 않는다는 것.. 이전에 BFS에서 시간 초과를 걱정해본 적이 없는데, 이 경우는 좀 기억해놔야 할 것 같아 정리해본다. 문제 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 ..

[백준] [삼성 SW 역량 테스트 기출 문제] 14499. 주사위 굴리기 (JAVA)

🎲 주사위 굴리기 오늘도 빡구현 문제를 푼다. 문제 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 2 4 1 3 5 6 주사위는 지도 위에 윗 면이 1이고, 동쪽을 바라보는 방향이 3인 상태로 놓여져 있으며, 놓여져 있는 곳의 좌표는 (x, y) 이다. 가장 처음에 주사위에는 모든 면에 0이 적혀져 있다. 지도의 각 칸에는 정수가 하나씩 쓰여져 있다. 주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다. 0이 아닌 경우에는 칸에..

[백준] [삼성 SW 역량 테스트 기출 문제] 13458. 시험 감독 (JAVA)

👨‍🏫 시험 감독 문제에 주어진 수의 범위에 주의하자 . . ! 문제 총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다. 감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다. 각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다. 각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,..

반응형