구현31 [백준] 10881: 프로도의 선물 포장 - JAVA https://www.acmicpc.net/problem/10881 풀이세 개의 선물을 한 상자에 넣어 포장해야 한다. 선물 세 개를 상자에 넣는 방법은 두 가지 경우로 생각해볼 수 있다. `ABC` 처럼 일렬로 놓는 방법과 A와 B를 위아래로 쌓고, C를 옆에 놓는 방법이 있다. 순열을 구해 3개의 선물의 순서를 구한다. 가로, 세로 길이가 주어진 선물을 그대로 놓을지 회전시켜 놓을지 `pos`배열에 저장하면서 순열을 구했다. 선물들의 순서와 회전여부가 주어지면 놓는 방법 2가지 경우에 필요한 상자의 크기를 구해 정답을 갱신했다. 메모리: 28108KB시간: 352ms언어: Java 11import java.io.*;import java.util.*;public class Main { stati.. 2024. 8. 13. [백준] 15671: 오델로 - JAVA https://www.acmicpc.net/problem/15671 풀이익히 알고있던 오델로 게임을 시뮬레이션하는 문제였다. 예를 들어 `BWWW` 와 같은 줄이 있을 때 오른쪽 끝에 B를 위치한다면 `BWWWB` 처럼 검정 돌이 흰 돌을 감싸 잡아먹게된다. 둘러쌓인 흰 돌이 검정색으로 바뀌게 되고 `BBBBB`가 된다. 검정 돌부터 시작하여 돌을 놓는 좌표가 주어지는데, 돌을 놓을 때 대각선까지 팔방탐색하여 처음 검정 돌을 만나면 이전의 흰 돌들을 검정색으로 바꾸고, 빈칸을 만난다면 패스한다. 최종 보드판의 상태와 검정, 흰 돌중 어느 돌이 많아 승리하는지 구하면 된다. 메모리: 14304KB시간: 104ms언어: Java 11import java.io.*;import java.util.*;publi.. 2024. 8. 13. [백준] 1117: 색칠 1 - JAVA https://www.acmicpc.net/problem/1117 풀이W x H 크기의 종이를 가로로 f지점에서 접어 왼쪽이 오른쪽 위로 올라오게 접는다. 그 후 세로로 (c + 1) 등분한다. (x1, y1), (x2, y2)의 지점에 색칠을 하는데, 이 때 겹쳐있는 부분 모두 색칠된다. 색칠이 안된 부분의 크기를 구해야 한다. 처음에는 W x H크기의 배열을 만들어 접는 식으로 구현했다. 이 방법으로 정답은 나왔지만 제출하니 메모리 초과가 발생했다. 그래서 배열을 만들지 않고 바로 뺄 수 있지 않을까 생각했다. 먼저 가로로 접히는 부분을 구해줘야 한다. f가 W / 2보다 크다면 왼쪽 부분이 더 길어져 색칠할 때 오류가 생긴다. 따라서, f가 W/2보다 클 때는 접히는 부분을 W - f로 설정해주었다.. 2024. 6. 25. [백준] 23747: 와드 - JAVA https://www.acmicpc.net/problem/23747 풀이이 문제는 보드 위에서 이동과 와드 설치를 처리하는 문제로, 주어진 명령에 따라 보드의 상태를 변화시켜야 한다. W 명령을 수행하여 해당 위치와 인접한 같은 타입의 영역을 방문 처리하고, 상하좌우 이동을 통해 요리사의 위치를 업데이트했다. 최종적으로 방문한 위치를 '.'으로 표시하고, 방문하지 않은 위치를 '#'으로 표시하여 결과를 출력했다. 메모리: 127596KB시간: 720ms언어: Java 11import java.io.*;import java.util.*;public class Main { static int r, c; static char[][] board; static boolean[][] result;.. 2024. 6. 10. [백준] 20207: 달력 - JAVA https://www.acmicpc.net/problem/20207 풀이일정들의 시작, 종료 날짜가 주어지고, 달력에 배치해야 한다. 달력에 배치할 때 주의해야 할 규칙은 다음과 같다. - 시작일이 가장 앞선 일정부터 차례대로 채워진다. - 시작일이 같을 경우 일정의 기간이 긴 것이 먼저 채워진다. - 일정은 가능한 최상단에 배치된다. 365일만큼 배열을 만들고, 일정이 있는 구간에 `+1`하여 누적합했다. 빈칸이 있으면 최상단에 배치되기때문에 누적합하여 높이와 길이를 정할 수 있기 때문이다. 일정이 없는 날짜가 나오면 `이전까지 누적했던 길이 * 높이`를 답에 더해주었다. 메모리: 14480KB시간: 136ms언어: Java 11import java.io.*;import java.util.*;publ.. 2024. 5. 19. [프로그래머스] 주사위 고르기 - JAVA https://school.programmers.co.kr/learn/courses/30/lessons/258709 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이n개의 주사위를 2명이 나눠가진다. 주사위에 쓰인 수의 구성은 모두 다르다. 나눠 가진 주사위들의 합을 구해 점수가 큰 쪽이 승리하는데, A가 승리할 확률이 높도록 주사위를 나눠야 하는 문제이다. 먼저 주사위를 어떻게 나눌지 완탐했다. getDice()메소드를 만들어 비트마스킹을 이용해 어떤 주사위를 A가 선택할지 정해주었다. 선택이 완료되면 calculateWinRate()메소드를 통해 승률을.. 2024. 5. 19. [프로그래머스] 표 병합 - JAVA https://school.programmers.co.kr/learn/courses/30/lessons/150366 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이union-find를 이용한 구현 문제였다. MERGE명령에 대한 설명을 읽고 union-find를 사용해야겠다고 생각했다. 병합된 셀의 어느 위치를 선택하더라도 병합된 셀로 접근한다는 부분에서 union-find에서 find를 해야겠다는 생각이 들었다. parent 배열을 1차원으로 만들기 위해 2501사이즈의 배열로 만들었다. 표의 크기가 50X50이기 때문에 (r,c)의 좌표를 (r-1)X.. 2024. 5. 18. [프로그래머스] 카드 짝 맞추기 - JAVA https://school.programmers.co.kr/learn/courses/30/lessons/72415 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이4 X 4 크기의 보드에 카드를 뒤집어 짝을 맞춰서 제거해야 한다. 카드 짝이 맞게 2개씩 위치를 저장해놓았다. 순열을 통해 제거할 카드 번호의 순서를 정해놓았다. 정해놓은 순서대로 제거해서 최소 이동을 계산하여 정답을 갱신했다. 메모리: 74.5MB시간: 1.17ms언어: Java 11import java.util.*;class Solution { static class Node { .. 2024. 5. 18. [프로그래머스] 블록 이동하기 - JAVA https://school.programmers.co.kr/learn/courses/30/lessons/60063 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이두 점의 좌표, 방향, 시간을 Node클래스에 담아서 진행했다. 방문처리는 가로를 0, 세로를 1로 놓고 3차원 배열로 처리했다. 이동했을 때 두 점이 모두 방문한 곳이라면 진행시키지 않았다. 귀찮은 구현문제였다. 메모리: 69MB시간: 5.70ms언어: Java 11import java.util.*;class Solution { static class Node { int x1.. 2024. 5. 17. [백준] 13335: 트럭 - JAVA https://www.acmicpc.net/problem/13335 풀이n개의 트럭이 길지 w의 다리를 건너는데 1을 가는데 1의 시간이 소요되고 다리가 견딜 수 있는 무게는 L이다. 다리 위에 L넘게 올라갈 수없다. 먼저 간 트럭이 다리를 벗어날 때까지 기다려야한다. 큐에 다리위에 있는 트럭들을 저장하고 sum에 트럭의 무게를 더해줬다. 큐에 넣을 때 다리를 벗어나는 시간까지 같이 넣어주었다. 시간을 늘리면서 큐의 맨 앞에 있는 트럭이 다리를 벗어날 시간이라면 큐에서 삭제, sum에서 무게를 빼주었다. `sum + 다음에 들어올 트럭의 무게`가 L보다 작거나 같으면 큐에 트럭을 넣어주었다. 메모리: 14444KB시간: 136ms언어: Java 11import java.util.*;import java.. 2024. 5. 17. 이전 1 2 3 4 다음