Algorithm/Algorithm (문제풀이)

🔒 문제 🧠 아이디어 ArrayDeque 를 사용하여 테트리스의 밀어 붙이기 아이디어를 사용. 이 때, index 방향을 제대로 설정해줘야한다. 합치는 구간에서도 진행 방향쪽 블록을 먼저 합쳐야 하기 때문에 index 진행 방향에 유의해야한다. 이 부분에서 실수하기 굉장히 쉬운 문제다. 🔑 Kotlin Code import java.io.BufferedReader import java.io.InputStreamReader import kotlin.math.max enum class Direction{ EAST, WEST, SOUTH, NORTH } // (1) 0으로 빈칸은 모두 당겨오기 처리 // (2) 당겨온 다음에 겹치기. // 겹칠 때 상태 확인 // Current modification 방지 p..
🔒 문제 🧠 아이디어 톱니바퀴 회전 아이디어 시계 방향 반시계 방향 자료구조로 덱 사용 회전 방향을 결정하는 것은 index2, 6 🔑 Kotlin Code import java.io.BufferedReader import java.io.InputStreamReader import java.util.* import kotlin.collections.ArrayDeque private fun rotateGears(gearNum: Int, gears: Array, gearRotateDirection: IntArray) { when (gearRotateDirection[gearNum]) { -1 -> { gears[gearNum].addLast(gears[gearNum].removeFirst()) } 1 -> ..
🔒 문제 🧠 아이디어 1. 월-일을 모두 Days (일) 로 통일 1월 1일-> 1 12월 31일 -> 365 로 치환한다. 이를 위해 HashMap 을 생성하여 각 월마다 일수를 매핑시켜주었다. private final HashMap monthDayMap = new HashMap(); { monthDayMap.put(0, 0); monthDayMap.put(1, 31); monthDayMap.put(2, 28); monthDayMap.put(3, 31); monthDayMap.put(4, 30); monthDayMap.put(5, 31); monthDayMap.put(6, 30); monthDayMap.put(7, 31); monthDayMap.put(8, 31); monthDayMap.put(9, 3..
🔒 문제 ⚠️ 실수 노트 1번 ~ 6번에 대해 전개도가 있으므로 동서남북 이동시 오게되는 윗 칸을 저장하는 6개 면을 의미하는 객체 생성 각 객체는 값을 가지고 객체별로 동서남북으로 주사위 방향이 이동했을 때 표현하는 객체 값을 고정해둠. 총 6개 면에 대해 동서남북 주사위 굴리기시 표현되는 윗칸을 '고정'하면 안된다. 굴리면서 보는 각도가 달라질 수 있기 때문이다. // 전개도의 각 면에대해 data class 를 미리 만들고 초기화 // ⚠️ 틀린 접근 방법 data class DiceSquare(var curVal: Int = 0, var east: DiceSquare?, var west: DiceSquare?, var south: DiceSquare?, var north: DiceSquare?, ..
🔒 문제 🧠 아이디어 가로 6, 세로 12를 갖는 테트리스 판의 일종이다 우선 4개 이상의 뿌요 조각이 인접해있을 때만 '.'으로 대치한다. + '.'으로 대치된 조각이 있으면 아래로 뿌요조각을 당겨야한다. 뿌요 조각을 당기는 아이디어가 핵심이다. 세로 막대를 의미하는 LinkedList 를 미리 6개 생성해두고 '.'만을 모두 제거해 남은 뿌요 조각을 뿌요판에 붙여넣는다. 또, 판 크기 자체가 12 * 6 == 72회로 작으므로 전체 판을 매번 긁어도 시간 초과하지 않겠다는 직관을 가지고 풀이했다. 하나의 뿌요조각이 다음 단계로 이어지려면 매번 4조각씩 해도 총 18라운드가 최대다. 72 * 72 * 18 => 약 10만 으로 절대 시간초과가 나지않는다. 🔑 Kotlin Code import java...
🔒 문제 🧠 아이디어 "()"을 모두 '*'로 미리 대치한다. 🔑 풀이 1. Kotlin Code ')' 을 만날 때마다 이전 '(' 까지 pop 하며 *의 개수를 카운팅하는 무식한 방법으로 풀이했다. import java.io.BufferedReader import java.io.InputStreamReader import java.util.* fun main() { val bufferedReader = BufferedReader(InputStreamReader(System.`in`)) val str = bufferedReader.readLine().replace("()", "*") val stack = Stack() var answer = 0 for (char in str) { when (char) ..
M_Falcon
'Algorithm/Algorithm (문제풀이)' 카테고리의 글 목록 (2 Page)