알고리즘 문제 풀이 56

[backjoon] 17143 낚시왕 java

https://www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 이 문제를 확인하면 크게 2가지를 구현해야함을 알 수 있다. 낚시와 상어의 이동 1. 낚시 : 낚시의 경우에 한 칸씩 왼쪽으로 이동하면서 0과 가까운 위치에 있는 물고기를 지워주면 된다. 2. 상어의 이동 상어가 정해진 규칙에 맞게 이동하면 된다. 한 칸에 여러 마리가 도착할 수 있는데, 한 칸엔 한 마리의 상어만 있을 수 있으며 크기가 제일 큰 상어만 남아있는다. 격자판이 크..

[SWEA]4408. 자기 방으로 돌아가기 (java)

완전 그리디 문제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 import java.util.*; import java.io.*; class Solution { public static void main(String args[]) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T; StringTokenizer st; st = new StringTokenizer(br.readLine()); T = Intege..

[SWEA]1970. 쉬운 거스름돈 java

그리디문제! 화폐 단위는 정해져있기에 먼저 내림차순으로 배열을 만든다. 큰 값부터 나눠줄 수 있으면 나눈 후 몫을 저장하고, 화폐 단위를 바꿔준다. 현재 값이 0이 될 때까지 반복한다. 구현 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import java.util.*; import java.io.*; class Solution { public static void main(String args[]) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T; Stri..

[backjoon]19237 어른 상어 java

https://www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 빡구현 문제! 이 문제에서 요구하는 것은 세 가지라고 생각한다. 1. 상어의 이동 2. 냄새의 관리 3. 상어자체에 대한 정보 관리(방향, 현재 상태) 이 세가지가 유기적으로 관련되어 있어서 하나가 꼬이면 더럿 꼬이는 것 같다. 초기화 과정이 매우 긴 것도 문제를 헷갈리게 하는 것 같다. 문제 풀이 1. 상어의 이동 1) 현재 방향의 우선 순위에 맞게 ..

[SWEA]5122. 수열 편집 java

LinkedList를 이용해서 주어진 요청사항에 맞게 풀이. 구현 코드 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import java.util.*;import java.io.*; class Solution { public static void main(String args[]) throws Exception { int T; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); T = Integer.parseInt(br.readLine()); StringTokenizer st; for (int test_cas..

[backjoon] 삼성 SW 역량 테스트 기출 문제 풀이 목록 java

https://www.acmicpc.net/workbook/view/1152 13460 구슬 탈출 2 12100 2048 (Easy) 3190 뱀 13458 시험 감독 14499 주사위 굴리기 14500 테트로미노 14501 퇴사 14502 연구소 14503 로봇 청소기 14888 연산자 끼워넣기 14889 스타트와 링크 14890 경사로 14891 톱니바퀴 15683 감시 15684 사다리 조작 15685 드래곤 커브 15686 치킨 배달 5373 큐빙 16234 인구 이동 16235 나무 재테크 16236 아기 상어 17144 미세먼지 안녕! 17143 낚시왕 17140 이차원 배열과 연산 17142 연구소 3 17779 게리맨더링 2 17837 새로운 게임 2 17822 원판 돌리기 17825 주사..

[SWEA] 1230. [S/W 문제해결 기본] 8일차 - 암호문3 java

풀이 문제의 요구사항대로 풀이하면 된다. 문자열의 중간에 삽입/삭제가 빈번하게 일어나서 LinkedList를 이용해서 풀이했다. 링크드리스트를 실제로 구현했으면 더 빨랐을 수도 있다. switch-case를 이용하였는데, if문과의 차이는 별로 없다고 알고있다. for문을 써도 되지만 while문이 더 편해서 일회성인 y값들은 while을 이용해서 풀이하였다. 구현 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 import..

[SWEA]3316. 동아리실 관리하기 D4 (java)

문제 풀이 비트마스크를 이용한 완전탐색 아닌 완전탐색, 빡구현 문제! DFS를 이용한 풀이도 가능할 것 같다. 메모이제이션을 이용하여 부분 집합들에 대한 값을 관리해주었다. 상당히 for문이 많이 쓰였지만 10,000 * 16 * 16 이라 괜찮은... 듯 싶다. 첫 번째 for문은 전체 동아리실 관리 날짜 수 이다. 두 번째 for문은 동아리실 관리에 어제 참여한 사람들의 부분 집합을 구하기 위한 부분이다. 세 번째 for문은 동아리실 관리에 당일 참여한 사람들의 부분 집합을 구하기 위한 부분인데, 어제를 먼저 확인하는 이유는 어제 참여하지 않은 사용자를 걸러내기 위함이다. 오늘 참여하는 사람(sub)이고, 당번(turn)이라면 값에 누적해서 연산해준다. 코드 1 2 3 4 5 6 7 8 9 10 11..

[SWEA]10726. 이진수 표현(java)

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXRSXf_a9qsDFAXS SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이 문제는 뒤에서 N개까지의 수가 1로 되어 있는지 확인하는 문제이다. 조건이 1 ≤ N ≤ 30 , 0 ≤ M ≤ 108 이기에 M을 3이라고 한다면 000....011 로 표현된다고 이해하면 된다. N도 3이라고 한다면 M=3의 뒤에서 N개는 011이고 1이 아닌 자리가 있기 때문에 OFF라고 할 수 있다. 나이브하게 자릿수 단위로 나눠서 홀수인지 짝수인지 풀이해도 되지만, 비트마스킹으로 풀어봤..

[SWEA]1288. 새로운 불면증 치료법(java)

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제에서 요구하는 것은 어떤 수의 자릿수 각각의 값들을 검증하는 것이라고 할 수 있다. 단순하게 풀면, 검증하기 위해 set에 넣어도 될 것 같은데, 비트마스킹을 이용해서 풀이해봤다. 먼저 어떤 수(N)은 검증을 완료할 때마다 같은 수가 더해지는 2N, 3N,,, 이 된다. 이 수를 10으로 나눠서 그 나머지를 확인해준다. 비트마스킹을 이용해서 확인하는 방법에는 1. &연산을 이용해서 숫자 지워주기..

반응형