전체 글(101)
-
[BOJ] 2342. Dance Dance Revolution
https://www.acmicpc.net/problem/2342 접근 방법 먼저 완전탐색을 이용해 재귀함수를 적용했다. 어차피 왼발, 오른발에 상태값은 0,1,2,3,4 로 고정되어있으니 무조건 재귀 함수를 불렀을 때 겹치는 결과가 나올 것이라 생각함. → 메모지에이션 현재있는 지점에서 어디로 갈 건지를 정하면서 left foot의 값에서 갈 지 right foot의 값에서 갈 지에 해당하는 힘을 추가해서 가장 최솟값을 구한다. static int going(int go, int to){ if(go==0) return 2; if(Math.abs(go-to) ==2) return 4; if(go==to) return 1; return 3; } 주의 사항 Need Know DP 전체 코드 ( Java ) ..
2020.07.14 -
[BOJ] 2718. 타일 채우기
https://www.acmicpc.net/problem/2718 접근 방법 그 전의 타일의 올 수 있는 경우에 대해 생각해봄. 그 전 타일이 올 수 있는 경우의 수는 총 5개가 나왔다. 1) 그 전의 타일이 다 채워져있는 경우 = 그 전의 타일이 하나도 채워져있지 않는 경우 2) 그 전의 타일이 밑에서 2개만 채워져있는 경우 3) 그 전의 타일이 가운데 2곳만 채워져있는 경우 4) 그 전의 타일이 위 아래 1곳씩 채워져 있는 경우 5) 그 전의 타일이 위의 2곳만 채워져있는 경우 위의 경우를 그림으로 표현을 해보았다. 여기서 왜 o x o x 를 하지 않았냐고 물어본다면 모든 타일이 채워져야하기 때문에 불가능하다! Need Know DP 전체 코드 ( Java ) import java.io.*; cla..
2020.07.13 -
[BOJ] 1915. 가장 큰 정사각형
https://www.acmicpc.net/problem/1915 접근 방법 정사각형이 되는 경우를 생각해보았다. 현재 꼭짓점(x,y)에서 (x-1,y) (x,y-1) (x-1,y-1)이 모두 true라면 정사각형이다. 처음에는 재귀적으로 호출을 해서 정사각형을 체크하려 해주었음 당연히 시간 초과... 어떻게 하면 체크 한 것을 가지고 있으면서 정사각형이 최대가 되는지에 대한 생각... index는 11000, 11000이 모두 고정적이다. → 메모지에이션을 쓰면 되지 않을까? 동적프로그램을 생각해보았다. 위, 왼쪽, 왼쪽위 대각선이 모두 1일 경우 위, 왼쪽, 왼쪽위 대각선의 최소값에 +1을 더한값이 가장 큰 정사각형이 된다. 위, 왼쪽, 왼쪽위 대각선이 1일 경우 cache[i][k] = max( c..
2020.07.12 -
[BOJ] 1194번 : 달이 차오른다, 가자.
https://www.acmicpc.net/problem/1194 접근 방법 처음 문제를 봤을 때 먼저 DFS, BFS 로 탐색을 해야한다는 것은 생각이 남 나는 BFS 탐색으로 했다. 가지고 있는 열쇠를 어떻게 표현해야 될 지에 대한 고민이 생김. BitMask 사용 ( a 열쇠를 가지고 있음 → 1
2020.07.12 -
[JAVA] 지네릭스
지네릭스를 왜 쓸까? 먼저 우리는 지네릭스를 쓰지 않는 경우를 생각해보자. class Box{ Object item; Box(Object item){ this.item = item; } Object getItem() { return item; } } public static void main(String[] args) { Box box = new Box("asdfxzcv"); // String temp = box.getItem();// 에러가 날 것이다. String temp = (String) box.getItem(); // 형변환을 해주고 타입체크를 해줘야댐 } 먼저 Object는 최상위 클래스이다. 그렇기 때문에 생성자를 통해서 String이나 int로 item을 만들어도 에러가 나지 않을 것이다...
2020.07.07 -
[Basic] OCP 개방 폐쇄 원칙
Open Closed Principle 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다. 즉, 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀 있어야 한다는 것이다. 이것은 Interface 를 통해 구현하여 해결한다. 위의 그림은 OCP를 따르지 않는 설계이다 왜 그러한가? 만약 Client입장에서 다른 서버를 사용한다고 생각해보자. 그럼 Client 클래스 자체를 바꿔야 하기 때문에 Server 클래스 입장에서 확장에 대해서 닫혀있다고 생각 할 수 있다. OCP원칙을 유지하면서 흔히 사용하는 2가지 패턴을 보도록 하겠다. 1. 전략 패턴 & 스트래터지 패턴 이러한 구현 방식을 가리켜 스트래터지 패턴(strategy patter..
2020.07.06