티스토리 뷰
문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV4yGVsKC0YDFAUx
풀이
제약 사항
1 ≤ N ≤ 500
1 ≤ M ≤ 2^31 – 1
동작 순서
N = 2, M=5 일 때
Tiles에 입력받은 N값들을 저장한다.
rects 리스트에 사용할 타일을 add한다. 주어진 타일(m)은 5이기 때문에 처음에는 (m,m) 즉 (5,5) 타일 add한다.
(rects 리스트에 들어가는 것은 사각형의 W,H 이다. (w,h)를 나타낸다.)
이제 입력받은 N값들 하나씩 꺼내서 rects list 안에 있는 사용할 타일들을 비교한다.
만약 rects list 안에 있는 타일들을 사용한다면 다음과 같이 (1,4)와 (5,1)의 타일이 남게 된다.
사용하고 남은 타일들을 다시 rects list에 add한다.
만약 사용할 수 없다면 주어진 타일(m)을 사용하고 (사용할 때 result +1을 해준다.) 남은 타일을 list에 add한다.
코드
package swexpert.D5;
import java.util.*;
public class 수정이의타일자르기_SW1812 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int tc = sc.nextInt();
for (int t = 1; t <= tc; t++) {
int n = sc.nextInt();
int m = sc.nextInt();
ArrayList<Integer> tiles = new ArrayList<>(); //입력받은 n개의 타일들
for (int i = 0; i < n; i++) {
int v = sc.nextInt();
tiles.add((int) Math.pow(2, v));
}
tiles.sort(Comparator.reverseOrder());
System.out.println("#" + t + " " + getTiles(n, m, tiles));
}
}
private static int getTiles(int n, int m, ArrayList<Integer> tiles) {
int result = 1;
ArrayList<Rect> rects = new ArrayList<>();
rects.add(new Rect(m, m));
for (int i = 0; i < n; i++) {
int targetTile = tiles.get(i);
boolean addTile = true;
int size = rects.size();
for (int j = 0; j < size; j++) {
Rect tmp = rects.get(j);
if (tmp.w - targetTile >= 0 && tmp.h - targetTile >= 0) {
//타일 사용할 수 있음
addTile = false;
if (tmp.h - targetTile > 0 && targetTile > 0)
rects.add(new Rect(targetTile, tmp.h - targetTile));
if (tmp.h > 0 && tmp.w - targetTile > 0)
rects.add(new Rect(tmp.w - targetTile, tmp.h));
rects.remove(j);
break;
}
}
if (addTile) {
result++;
rects.add(new Rect(targetTile, m - targetTile));
rects.add(new Rect(m - targetTile, m));
}
}
return result;
}
static class Rect {
int w, h;
public Rect(int w, int h) {
this.w = w;
this.h = h;
}
}
}
'Algorithm > SW Expert Academy' 카테고리의 다른 글
[SWExpert] 2814. 최장경로 (0) | 2020.01.16 |
---|---|
[SWExpert] 2806. N-Queen (0) | 2020.01.16 |
[SW Expert] 5658. [모의 SW 역량테스트] 보물상자 비밀번호 (0) | 2020.01.10 |
[SW Expert] 5656. [모의 SW 역량테스트] 벽돌 깨기 (0) | 2020.01.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SWExpert
- 사회망서비스
- MFQ
- 프로그래머스
- DFS
- Process Scheduling
- 백트래킹
- 우선순위큐
- 3-way-handshake
- 4-way-handshake
- Android
- Objective function
- 백 트래킹
- 자료구조
- hash
- java
- 네트워크
- hashtable
- 기능개발
- MLQ
- SRTN
- git
- 프로세스 스케줄링
- programmers
- loss function
- 농협정보시스템IT
- binarySearch
- 알고리즘
- N-Queen
- algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함