일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 트랜잭션속성
- kotlin
- 코틀린
- 우아한테크코스
- 백준
- 스프링트랜잭션
- 테코톡
- ObjectCalisthenics
- jsp프로젝트
- 데이터베이스락
- GithubOAuth
- Google Place Photo API
- 객체지향생활체조
- 알고리즘
- KotlinInAction
- 무중단배포
- java
- 리버스프록시
- 코틀린뽀개기
- tomcat설정
- S2139
- mysqld.sock
- DynamicWebProject
- 레벨로그
- 트랜잭션
- 코틀린기초
- 트랜잭션성질
- 자바비동기
- servlet프로젝트
- subprocess에러
- Today
- Total
초이로그
[SW Expert Academy]5656:벽돌 깨기 본문
너무 복잡한 구현이었던 벽돌깨기!!!
스터디 문제였는데 당시에는 못풀고 드디어 풀었다!!!
1. makeSet(): 구슬을 떨어뜨리는 경우(N)만큼 선택할 수 있는 열의 경우의 수를 생성한다
(예제 1처럼 N=3, W=10인 경우, 10*10*10의 경우의 수를 생성)
1-1. copyArray(): 경우의 수마다 구슬을 쏴 테스트 하기 위해 주어진 벽돌 정보 배열을 복사한다
1-2. 생성된 경우의 수(N)대로 구슬을 쏜다.
1-2-1. findH(): 선택된 열의 가장 최상단 벽돌의 가로측 위치를 구한다.(즉 좌표 정보 획득!) 만약 해당 열에 벽돌이 없으면 continue;
1-2-2. shootMarvel(): 해당 좌표로 구슬을 쏜다. bfs를 이용하여 벽돌정보만큼 상하좌우로 터뜨린다.
1-2-2-1. validation(): 상하좌우에 해당되는 좌표가 가능한 좌표인지 확인.(벽돌이 있는지, 범위내에 있는지)
만족하면 큐에 해당 좌표 삽입.
1-2-3. sortBricks(): 구슬 사이의 빈공간을 구슬을 아래로 모두 떨어뜨려(?) 매꾼다.
열마다 큐를 사용하여 남아있는 벽돌을 넣고 아래서부터 붙여넣음.
깨진 벽돌의 수는 shootMarvel(), validation()에서 유효한 벽돌인 경우를 카운팅하는 방식으로 구현했다.
1번부분 구현에서 턱 막혔었다..그래서 나머지 로직을 먼저 구현한다음, 그 이후에도 생각이 안나길래....
살짝 찾아보고 재귀로 풀어냈다...
나중에 다시 한번 풀면 좋을것 같다.
github.com/SuyeonChoi/Algorithms/blob/master/SW%20Expert%20Academy/Java/Simultaion/p5656.java
'Algorithms > SW Expert Academy' 카테고리의 다른 글
[SW Expert Academy]1251:하나로 (0) | 2021.06.01 |
---|---|
[SW Expert Academy]2115:벌꿀채취 (0) | 2021.04.22 |
[SW Expert Academy]모의 SW 역량테스트-1952:수영장 (0) | 2021.03.12 |
[SW Expert Academy]S/W 문제해결 기본 7일차-1227:미로2 (0) | 2021.03.07 |
[SW Expert Academy]8382:방향 전환 (0) | 2021.03.07 |