백준알고리즘 6086번, 최대 유량

드디어 네트워크플로우 처음에 목표한 알고리즘이 MCMF까지였기 때문에, 곧 결과에 쫓기듯 공부할 필요는 없을꺼같다. 배울 알고리즘이 참 많지만 사실 그런알고리즘은 내가 앞으로 쓸일이 있을까 하는 의문이 들어서 필요성을 느끼지 못하겠다. 그리고 필요하다면 그 때 배워서 사용하면 될꺼같기도 하다. 시험문제로 나온다면.. 그저 슬플수 밖에 ...

1월 4, 2018 · Jaejin Jang

디자인 패턴 - 싱글턴 패턴

싱글턴 패턴 인스턴스가 하나 만들어지고 어디서든지 인스턴스에 접근하기 위한 패턴 간단히 인스턴스에 접근하기 위한 get메소드, 기본적인 생성자, 인스턴스 멤버변수로 구성된다고 가정해보자. ...

1월 1, 2018 · Jaejin Jang

프로그래머스 - 사칙연산

완전 초급용은 아닌 dp 이제 자신감이 좀 붙는고만 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 import java.awt.Point; import java.util.HashMap; class Solution { static int[] intarr; public static int solution(String arr[]) { HashMap<Point,Integer> dmax = new HashMap<Point,Integer>(); HashMap<Point,Integer> dmin = new HashMap<Point,Integer>(); int len = arr.length; int max_temp = 0; int min_temp = 0; int max = 0; int min = 0; // 숫자로 변환, 및 기본값 세팅 intarr = new int[arr.length]; for(int i=0;i<len;i++) { if(arr[i].equals("+")) { intarr[i] = 1001; // 플러스는 1001로 치환 } else if (arr[i].equals("-")) { intarr[i] = 1002;// 마이너스는 1002로 치환 } else { intarr[i] = Integer.parseInt(arr[i]); dmax.put(new Point(i,i), intarr[i]); dmin.put(new Point(i,i), intarr[i]); } } for(int i=2;i<len;i+=2) { //하나의 연산을 포함하는 길이에서 입력의 모든 연산을 포함하는 길이가 될때까지, 길이의 증가는 +2씩(연산자 하나, 숫자하나) for(int j=0;j+i<len;j+=2) { // 0자리 부터 시작해서 해당 순서의 길이까지 반복, 최대 길이를 넘지 않아야 함 max_temp = 0; min_temp = 0; max = Integer.MIN_VALUE; min = Integer.MAX_VALUE; for(int k=j;k<i+j;k++) { // +,- 연산이 오는 경우 범위에서의 min과 max를 구한다. if(intarr[k]==1001) { max_temp = dmax.get(new Point(j,k-1)) + dmax.get(new Point(k+1,i+j)); min_temp = dmin.get(new Point(j,k-1)) + dmin.get(new Point(k+1,i+j)); if(max_temp>max) max = max_temp; if(min_temp<min) min = min_temp; } else if(intarr[k]==1002) { max_temp = dmax.get(new Point(j,k-1)) - dmin.get(new Point(k+1,i+j)); min_temp = dmin.get(new Point(j,k-1)) - dmax.get(new Point(k+1,i+j)); if(max_temp>max) max = max_temp; if(min_temp<min) min = min_temp; } } dmax.put(new Point(j,j+i), max); dmin.put(new Point(j,j+i), min); } } return dmax.get((new Point(0,len-1))); } }

12월 31, 2017 · Jaejin Jang

프로그래머스 - 게임 맵 최단거리

BFS로 구현했는데, 효율성 테스트에서 자꾸 시간초과가 나서 고민했던 문제 알고보니 중복방문을 방지하기 위한 코드가 없었음.. 방문 확인의 중요성!! 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 import java.util.LinkedList; import java.util.Queue; import java.awt.Point; class Solution { public static int solution(int[][] maps) { int X = maps[0].length; int Y = maps.length; boolean[][] visited = new boolean[Y][X]; Queue<Point> q = new LinkedList<Point>(); int x = 0; int y = 0; int size = 0; int cnt = 0; Point p = new Point(); q.add(new Point(Y-1,X-1)); while(q.isEmpty()==false) { size = q.size(); cnt++; for(int i=0;i<size;i++) { p = q.peek(); x = p.y; y = p.x; q.remove(); if(visited[y][x]==true) continue; maps[y][x] = 0; visited[y][x] = true; if(x==0 && y==0) { return cnt; } if(x-1>-1 && maps[y][x-1]==1) { //왼쪽 한칸 q.add(new Point(y,x-1)); } if(x+1<X && maps[y][x+1]==1) { //오른쪽 한칸 q.add(new Point(y,x+1)); } if(y-1>-1 && maps[y-1][x]==1) { //위쪽 한칸 q.add(new Point(y-1,x)); } if(y+1<Y && maps[y+1][x]==1) { //아래쪽 한칸 q.add(new Point(y+1,x)); } } } return -1; } }

12월 27, 2017 · Jaejin Jang

프로그래머스 - 폰켓몬

문제를 잘 파악하면 어렵지 않은 문제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import java.util.HashSet; import java.util.Iterator; public class Solution { public int solution(int[] nums) { HashSet<Integer> abc = new HashSet<Integer>(); for(int i=0;i<nums.length;i++) { abc.add(nums[i]); } if(abc.size()>nums.length/2) return nums.length/2; else return abc.size(); } }

12월 27, 2017 · Jaejin Jang

다시

Start

12월 27, 2017 · Jaejin Jang

ActiveX 란?

이번 글에서는 InternetExplore에서 ActiveX를 퍼징하기 위한 관점에서 ActiveX에 대해서 살펴보겠습니다. ActiveX 개요마이크로소프트에서 만든 COM(Component Object Model)과 OLE(Object Linkg and Embedding)를 합쳐 새로운 이름을 붙여 준것이다. 엄밀하게는 ActiveX는 전반적인 기술을 의미하고, ActiveX컨트롤은 ActiveX를 이용해 만든 프로그램을 의미한다. ...

12월 26, 2017 · Jaejin Jang

COM 이란?

앞서 ActiveX는 COM과 OLE를 합친 기술라고 설명했습니다.이번에는 그 중에 하나인 COM에 대해서 알아 보겠습니다. 퍼징을 위해 필요한 정도만 알아볼 것 입니다. ...

12월 26, 2017 · Jaejin Jang

CLSID를 이용한 COM 메서드 확인

HTML에서는 ActiveX(COM)를 부를 때 CLSID를 사용합니다.웹 페이지상에서 소스 보기를 이용해서 CLSID를 볼 수 있기 때문에, 구해진 CLSID로 Powershell을 통해 메소드를 확인할 수 있습니다. ActiveX뿐만 아니라 COM 객체는 모두 확인할 수 있습니다. ...

12월 25, 2017 · Jaejin Jang

windbg 사용법 정리

제가 참고할 용도로 작성하고, 계속 추가해 나갈 예정입니다. 로드되지 않은 심볼에 breakpoint 설정 특정 모듈이 로드되기 전에 모듈 내부에 bp를 걸고싶을때 사용 bu xxx!print+0x1f3 // xxx모듈의 print 함수 +0x1f3 위치에 bp ...

12월 25, 2017 · Jaejin Jang