본문 바로가기

삼성 역량테스트 문제

(13)
백준 20056 <마법사 상어와 파이어볼> 최근에 나온 삼성 역량 테스트 시뮬레이션 문제이다. 문제 풀이 순서 모든 파이어볼을 담을 queue를 이용해서 이동시킨다. 한자리에 모여 있는 수가 2개일 경우 결합과 분해가 일어나고 1개일 경우 바로 queue에 다시 넣어준다. K번을 수행하고 난 뒤 queue에 있는 무게를 더하면 된다. 파이어볼의 상태를 나타내기 위해 fire이라는 클래스를 선언했다. 또한 이동 후의 상태를 저장한 move 클래스를 선언했다. 파이어 볼을 이동하면서 주의해야 할 점은 이 과정을 해줘야 한다는 것이다. 파이어볼을 이동할 때 몇 개가 겹치는 지를 알아야 하기 때문에 ArrayList map [][]을 사용 또한 그것의 상태를 저장하기 위한 ArrayList al를 사용 다음 그림과 같이 처리를 한다. 그리고 모든 맵의 ..
백준 17135 <캐슬 디펜스> 조합으로 3명의 궁수를 배치하고 나서 게임을 진행하는 시뮬레이션 문제! 문제를 잘읽어보는게 포인트인 문제이다. 문제 풀이 M개중에 3개의 궁수위치를 조합으로 선택한다. 각각의 궁수 위치에서 D 이하이면서 가장 가깝고 왼쪽에 있는 적을 선택한다. 적은 한칸씩 당겨준다. 여기서 주의할 점은 같은 적을 때릴 경우가 있다는 것이다. 조합으로 궁수의 위치를 선택한다 D거리 이하중 가장 가깝고 왼쪽에 있는 것 선택!!! 그 이후 적을 죽이고 맵을 당겨오는 과정 여기서 생각해야 할 점 하나 더! 조합으로 선택한 후 적을 죽이고 맵을 당겨오는 과정이 있기 때문에 map을 복사해서 사용! 전체 코드 더보기 import java.awt.Point; import java.io.BufferedReader; import jav..
백준 19236 <청소년 상어> 이렇게 푸는 문제가 맞나?라는 생각이 들게 한 시뮬레이션 문제. 매번 물고기 위치와 죽은 물고기수와 상어가 먹은 물고기 합을 들고 다녀야 한다는 게 너무 비효율적이라고 생각되었다. 물고기들을 한번 이동 시키고 상어가 갈 수 있는 방향에 있는 물고기를 먹으면서 먹을 수 없을 때까지 진행하는 문제이다. 풀이 방법 각각의 단계마다 map[][]과 물고기 위치를 표시한 num [][] 배열과 물고기들의 생존 여부 death []를 복사한다. 옮겨닮은 것들로 우선 물고기들을 이동 시킨다. 상어가 향하는 방향에 있는 물고기마다 dfs를 진행해 다음 단계로 향한다. 각 단계마다 물고기들을 먹은 count의 값을 비교해준다. 물고기의 현재 현재 위치랑 값을 담는 클래스를 선언! 1 전체의 상태를 옮겨 담는 과정 -->..
백준 17144 <미세먼지 안녕!> 설명이 잘되어 있는 말 그대로 주어진 순서에 맞게 해결하면 되는 시뮬레이션 문제이다. 골드 5 난이도로 삼성 역량 테스트 중에는 쉬운 난이도라고 볼 수 있다. 이 문제는 쉬운 문제이기때문에 함수를 구현해 각각의 함수가 잘 돌아가는지 테스트 겸 풀어도 좋을 것 같다. 문제 풀이 미세먼지 확산을 위한 추가의 visit[][]이차원 배열을 선언하고 확산시킨다. 이때 몇 번 확산시킬 수 있는지 세어줘야 현재의 남은 미세먼지도 정할 수 있다. 확산이 끝나면 다시 map에 이동 시켜준다. 공기청정기를 기준으로 위쪽, 아래쪽 따로 분리해서 계산해준다. 시간이 t가 지나면 남아있는 map의 미세먼지 수를 계산해주면 끝! 확산을 시켜주는 단계이다. 그 후 다시 map에 옮겨준다. 위 쪽을 먼저 순서대로 계산해준다. 마찬..
백준 16235번 <나무 재테크> 최악의 시뮬레이션.... 시간 초과가 무엇인지를 제대로 보여주는 시뮬레이션이었다... 이문제를 풀면서 느낀 건 시간!! 시간!! 시간이다.. 이 문제의 핵심은 시뮬레이션대로 어떻게 시간을 줄여줄 건인가 였다. 문제 풀이 모든 나무들을 live라는 queue에 넣어주고 나이가 작은 순으로 collections.sort 해준다. 4 계절대로 흐름을 구성한다. 봄 --> live큐에서 꺼내서 양분을 먹을 수 있으면 나이를 먹고 live에 다시 넣어주고 안되면 die queue에 넣어준다. 여름 --> die 큐에서 꺼내서 양분으로 준다. 가을(가장 까다로움) --> 작은 순으로 다시 live에 넣어줘야 하기 때문에 p라는 큐를 만든다. *live에서 꺼낸 큐를 p에 넣고 5로 나눠진다면 8방향 중 가능한 곳의..
백준 17780 <새로운 게임> 내가 접한 시뮬레이션 중에 가장 어려운 축에 속하는 시뮬레이션 문제... 실제로 시험 칠 때도 마찬가지였지만 다시 봐도 헷갈리는 문제! 문제 풀이 순서 1000번을 진행하면서 각각의 말이 아래 지점인지 확인! 아래의 말일 경우에 파란색(범위가 벗어날 경우) , 빨간색, 흰색 경우를 고려해준다. 파란색일 경우 현재위치에서 방향을 바꿔 이동한다. --> 이 경우!! 이동 한 지점이 무조건 흰색이거나 파랑이 아니다!! 빨강일 경우도 있다! 빨강일 경우 순서를 뒤집어 준다! 흰색일 경우 모든말 그대로 움직인다. 현재 위치의 말의 수가 4개 이상이면 return~ 이 문제의 경우 시뮬레이션 문제를 많이 풀어봤었다면 생각할 수도 있는 문제였다. 각각의 말의 정보를 저장하기위한 miniun class를 따로 선언해줬..
swea 2105 <디저트 카페> swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu&categoryId=AV5VwAr6APYDFAWu&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이전에 풀었던 게리맨더링 2오 비슷한 문제이다 이문제를 풀어보게 된다면 이 문제도 같이 풀어보는 것이 좋다. skygood95.tistory.com/25 백준 17779 게리맨더링 주어진 방법보다 어렵게 푼 방식이기 때문에 참고!! 만 하자! 이 문제는 DFS 즉 백트래킹으로 가능한 꼭지점 4개를 구하고 최소의 차이가 나는 값을 출..
백준 17281 <야구공> 이문제는 1번 선수를 4번 타자로 배정하고 나머지 인원으로 어떻게 순서를 배정하면 되는지 순열 문제이다. 풀이 단계 0번 선수를 4번 타자에 넣고 나머지 인원을 순열로 구성한다. 순서가 구성이 완료되었다면 이닝수만큼 진행한다. 각각의 타자가 수행한만큼 전체 타석의 인원을 이동을 해주고 out이 3이 되면 다음 이닝으로 진행한다 choice라는 배열에 타자의 순서를 넣도록 한다. 순열을 구성하는 함수이다. i가 3일 경우에 이미 1번 타자가 4번째로 와있으므로 다음 타자로 넘어간다. 각각의 이닝마다 타석에 위치한 선수들은 다 나가기 때문에 이닝마다 타석을 초기화시켜준다! 이 부분에서 약간의 실수가 있었다.ㅠㅠ out이 3이 될 때까지 각 이닝을 진행한다. 타석이 이렇게 생겼기 때문에 2번 타자부터 나가야지..
백준 17471 <게리맨더링> 2가지 선거구로 나누고 선거구가 연결되어있는지 확인하는 문제! 즉 부분집합을 구하고 각각의 선거구에서 BFS를 실행해서 연결되어 있는지 확인하는 것!! 반대로 생각을 하면 복잡하기도하고... 풀리지 않는 문제 ㅜㅜ 즉 문제를 많이 풀어봐야 한다. 선거구를 두 개로 나눈 것이다. 이 cal 부분은 선거구가 두 개로 나뉘어서 연결되어 있는지 확인하는 코드이다. 두 개가 연결되었다면 count는 2가 될 것이고 값을 비교해서 넣어주게 된다. 인접 리스트를 이용해서 다음 노드가 같은 팀인지 확인하게 되고 같은 팀이라면 큐에 넣고 BFS를 실해해 주는 것이다. 이렇게 총 3단계를 이용해서 문제를 해결할 수 있다. 이 방법이 생각이 어떻게 나냐? 하는 사람들은 문제를 많이 풀어보길 권한다. 전체 코드 더보기 imp..
백준 17779 <게리멘더링2> 게리맨더링 주어진 방법보다 어렵게 푼 방식이기 때문에 참고!! 만 하자! 이 문제는 DFS 즉 백트래킹으로 가능한 꼭지점 4개를 구하고 최소의 차이가 나는 값을 출력하는 것이다. 문제에서 처럼 푼다면 4중 포문으로 꼭지점의 좌표 d1, d2, 이렇게 구해서 계산을 하면 되겠지만 문제를 이해하고 계산하는 방법이 없다면 푸는 방법이다. DFS를 3번 돌려서 가능하다면 최솟값을 비교해주도록 했다. 이 그림으로 설명하자면 1의 꼭지점을 잡고 오른쪽 아래로 이동 꼭지점이 가능하다면 왼쪽 아래 대각선으로 이동이 가능하다면 1에서 2까지 온 거리만큼 3위 치에서 좌상 대각선으로 이동하는 문제이다. 이렇게 총 3번의 DFS로 문제를 해결할 수 있다. 1번에서 빨간방향으로 한번 이동해서 계산해주고 다시 돌아와 파란색 동..