전세와 월세 빨리내는 법

 

PHILIPS 광고 : Let's make things better (작은 차이가 명품을 만듭니다)

LG 광고 : 순간의 선택이 10년을 좌우합니다.

 

일반적으로 전월세 내는 법

1. 중개사에게 시세를 물어본다.

2. 중개사에게 잘 부탁한다고 격려해준다.

3. 중개사가 전화 줄때까지 걱정하며 기다린다.

4. 중개사에게 전화를 걸지만 기다리라는 말을 듣고 끊는다.

5. 높게 내놓은건 아닌가 싶어 네이버를 뒤져본다.

6. 중개사가 원망스럽지만 걱정하며 기다린다.

7. 중개사가 임차인을 구해오자 고생했다고 칭찬해준다.

8. 막상 중개비 주려니 아까워 중개사와 협상을 한다.

 

차이 1

물고기를 빨리잡고 싶다면 낚시대를 많이 놓아라

임차인은 물고기, 중개사는 낚시대

중개사는 공유를 하기 싫어한다.

여러군데 중개사에 동시에 내 놓는다.

 

차이 2

우리 동네말고 주변에도 내 물건을 내 놓아라

특히 상가같은 경우는 옆동까지 내 놓아야 한다.

동네를 정하지 않고 돌아다니는 임차인도 많다.

 

차이 3

내 물건을 다양한 방법으로 홍보하라.

각종 SNS, 인터넷 카페, 직거래 사이트 등에 홍보한다.

중개사만 임차인을 데려오는 것이 아니다.

중개사, 관리소장, 네이버카페, SNS (특히 상가는 관리소장이 해당 상가를 잘 알고 있는 경우가 많다)

 

차이 4

미끼를 좋은것을 사용해라.

임차인은 물고기, 중개사는 낚시대, 수수료는 미끼

중개사에게 시세를 알아볼때 매도인, 매수인 입장으로 바꿔가면서 확인해라.

중개사도 돈 때문에 일한다.

중개사 수수료를 많이 주는것도 방법이다.

하지만 중개수수료를 많이 받으려다가 영업정지 위험때문에 믿지 않는 중개사도 많다.

이런 경우 믿음이 가게 한다. (자료작성자는 한번거래때 수수료를 조금 더 준다고 함)

 

차이 5

낚시대를 좋은 것을 써라

중개사 자격증 있다고 중개 잘하는게 아니다

능력있는 중개사를 구별해서 내놓아라. 보통 30군데를 내놓아야 한다. 30군데 한시간반이면 전화 돌릴 수 있다.

임차인의 입장으로 중개사에게 연락해보면 어떻게 영업을 하는 중개사인지 알 수 있다.

 

차이 6

낚시대에 미끼가 잘 달려있나 자주 확인하라.

중개사들은 내 것 말고도 많은 물건을 가지고 있다.

전화해서 웃으며 연락이 없네, 잘 안나가나 보네 등등 안부를 묻는다.

3일에 한번 문자. 일주일에 한번 전화로 확인한다. (인간의 기억력은 대략 3일 정도 지속)

중개사들은 적어놓고 잊어 버리기도 한다.

 

차이 7

중개사가 나를 기억하게 만들어라

중개사들은 많은 사람과 많은 전화를 접한다. 전화를 하루에 100통~150통은 받는다.

기억에 남는 사람, 도와주고 싶은 사람이 되라

한가지 방법은 중개사에게 호재등 뉴스를 알려주면 고마워하는 경우가 있다.

 

차이 8

우선 맞추고 나중에 올린다.

상가는 1년에 9%에 올릴수 있고 전세는 2년뒤에 올릴 수 있다.

공실을 피하는 것이 좋다.

한 달 공실일 때 유지비를 계산하라

유지비를 고려해서 우선 맞추고 나중에 올린다.

 

핵심정리

1. 여러 중개사에 내놓는다.

2. 주변 동네에도 내놓는다.

3. 다양한 방법으로 내놓는다.

4. 중개 수수료를 많이 준다.

5. 중개사의 실력을 구분한다.

6. 자주 연락해서 확인한다.

7. 인간적인 매력을 준다.

8. 우선 맞추고 천천히 올린다.

 

매수하는 건 내 마음대로 되지만 빌려주는 건 내 마음대로 안된다

전월세 빨리 안나간다고 스트레스 받으면 나만 손해다

먼저 할 수 있는 최대한 노력해보고 걱정을 하라

 

출처 : 부동산읽어주는남자 정태익대표

부동산 투자자가 준비해야 할 것

 

준비물

1. 대한민국 전도

지도는 한눈에 들어와야 합니다. 대형 ( 150 X 210 cm )

종이형과 족자형이 있습니다.

지도는 이미 지난것은 소용이 없습니다. 최신판을 구비하는 것이 좋습니다.

모니터 핸드폰과 같이 작은 화면이상의 감을 기를 수 있습니다.

 

2. 경기도 전도

경기도 전체를 그린 지도입니다. 크기와 이유는 대한민국 전도와 같습니다.

 

3. 스마트폰

대용량 배터리 : 많이 돌아다녀야 하기 때문에 배터리가 커야합니다.

고성능 카메라 : 사진을 많이 찍어야 합니다.

음성 녹음 : 아이폰은 지원하지 않는 기능. 중개사나 임차인등 통화내용을 녹음하면 다시 들을 수 있어 좋습니다.

노트필기 가능 : 갑자기 필기할 일이 생깁니다.

예) 삼성 갤럭시 노트

 

4. 노트북

얇고 배터리 오래가는 노트북

크기는 14인치 정도가 적당합니다. 무게는 가벼울 수록 좋습니다. 배터리는 오래갈수록 좋습니다.

예) LG올데이그램 14인치, 256GB, 무게 970g, 배터리 최장 24시간

 

5. 블루투스 마우스

터치패드는 느립니다. 아무때나 빠르게 사용할 수 있는 블루투스 마우스가 좋습니다.

가벼운 마우스가 좋습니다.

예) Microsoft Sculpt Comfort 블루투스 마우스 30,000 정도

 

사이트

정확한 정보를 얻을 수 있어야 합니다. 남의 말만 듣고 하면 큰일납니다.

1. 대법원인터넷 등기소 www.iros.go.kr

등기를 확인해 볼 수 있습니다. 700원에 등기를 뗄 수 있습니다.

안드로이드 앱도 있습니다.

 

2. 토지이용규제정보서비스 luris.molit.go.kr

토지에 대한 규제정보를 제공해줍니다. 개발제한구역 등을 확인할 수 있습니다.

주택이나 토지구매시 항상 확인해야 합니다.

 

3. 국가법령정보센터 www.law.go.kr

법제처로 우리나라 모든법을 올려놓은 곳입니다.

주택임대차보호법 등을 검색해 볼 수 있습니다.

4. 국세청 www.nts.go.kr

 

국세청발간책자에 절세정보등 유익한정보가 많습니다.

 

온라인 지도

1. 네이버지도

현재는 네이버가 성장해서 네이버지도가 편의기능이 많습니다.

 

2. 다음지도

로드뷰의 연도가 달라서 네이버와 다음의 최신정보가 다릅니다.

 

3. 구글맵스

국가 기간산업, 군사기지, 발전소, 교도소 등을 확인할 수 있습니다. 국내지도는 규제때문에 공원으로 처리됩니다.

 

부동산 정보 사이트

1. 네이버 부동산

우리동네뉴스에서 투자관심지역의 뉴스를 봅니다. 핫이슈, 부동산 칼럼을 유의깊게 봅니다.

 

2. 부동산읽어주는남자재테크스쿨

자료출처자 홍보입니다. ㅎㅎ

 

프로그램

1. 크롬 브라우저

모르는단어를 드래그 후 우클릭으로 구글검색기능이 편리합니다. 모르는 부동산 용어가 나오면 바로바로 확인합시다.

 

2. To-do 프로그램

분더리스트 Wunderlist (MS 에 매각되어 더이상 업데이트는 되지 않음. but 기존 기능도 좋습니다)

해야할일 일정관리 프로그램 알림이 뜹니다. 필요한기능이 깔끔하게 정리되어 있습니다.

할일 정리, 기한 설정, 알림 설정이 됩니다.

부동산 투자는 일정마다 해야 할 일이 정해져있고 잊어버리는 순간 큰 손해의 위험이 있습니다.

 

3. 에버노트

클라우드 노트로 잡다한 모든 내용을 기록할 수 있다.

 

모바일 어플

1. 네이버 부동산

일상생활에서 GPS 로 주변 시세를 확인하는 습관을 꼭 들이면 좋습니다.

 

내용 정리

1. 마인드를 갖추기 위해 멘토를 찾고 책을 읽는다.

2. 가장 기본이 되는 지도부터 사자

3. 핸드폰, 가벼운 노트북, 블루투스 마우스

4. 엑셀, 한글, 타자 연습 필수

5. 정부기관 사이트 숙지, 지도사이트, 정보사이트

6. 크롬, 에버노트, 모바일 어플 설치 및 활용

 

출처 : 부동산읽어주는남자 정태익대표

'부동산 유튜브' 카테고리의 다른 글

집수리 어디까지 해줘야 하는가  (1) 2018.07.08
전세와 월세 빨리내는 법  (0) 2018.07.08
배당공부의 한계와 절차  (0) 2018.07.08
원거리 물건관리  (0) 2018.07.08
LTV, DTI, DSR 용어란?  (0) 2018.07.07

배당공부의 한계와 절차

 

배당이란 : 낙찰금을 판사가 채권자에게 나눠주는 것 (민사집행법)

 

배당을 얼만큼 알아야 할까?

투자자입장에서는 배당에 대하여 과락을 면할만큼만 배우면 됩니다.

하지만 알긴 알아야합니다.

배당때문에 추가로 물어주는 돈이 결정됩니다.

명도하는데 도움이 됩니다.

세입자가 돈을 받을 수 있게 도움을 주면 명도가 수월해집니다.

또한 살다보면 경매를 당하기도 할 수 있습니다.

살다보면 경매를 신청하기도 합니다.

 

내용정리

1. 경매는 이론보다 경험이 중요하다.

2. 이론공부에 빠져서 실전을 소홀이 하지 말라

3. 배당절차를 배워놓으면 명도에 도움이 된다.

4. 살면서 경매를 당하거나 경매신청할 때 도움이 된다.

5. 법은 상식이다. 법조문이 어려울 뿐 내용은 쉽다.

6. 배당종기일까지 신청하지 않으면 배당에서 제외

7. 배당기일에 출석해야 이의를 제기할 수 있다.

8. 받아가지 않는 돈은 공탁소에 공탁됨

 

출처 : 부동산읽어주는남자 정태익대표

'부동산 유튜브' 카테고리의 다른 글

집수리 어디까지 해줘야 하는가  (1) 2018.07.08
전세와 월세 빨리내는 법  (0) 2018.07.08
부동산 투자자가 준비해야 할 것  (0) 2018.07.08
원거리 물건관리  (0) 2018.07.08
LTV, DTI, DSR 용어란?  (0) 2018.07.07

원거리 물건 관리

 

수리관리

중개사, 수리업체, 임차인, 임대인은 이해관계가 얽혀있어 상호체크를 하면 대부분 사실을 확인할 수 있다.

일반적으로 중개사, 법무사, 수리업체가 함께 일을 하기 때문에 시설수리는 임차인을 통해 확인가능하다.

임차인은 본인이 살아야 하는 집이기 때문에 사실대로 확인할 수 밖에 없다.

수리필요여부도 임차인에게 카카오톡으로 사진이나 동영상을 받을 수 있다.

수리업체에게도 견적을 받을때 사진이나 동영상을 받을 수 있다.

두개를 비교하여 사실여부를 확인한다.

수리가 완료된 사진은 임차인에게 직접 받아서 확인 후 수리업체에게 대금을 전달한다.

수리영수증은 받아서 챙겨놓으면 나중에 양도세에세 혜택을 일부 볼 수 있다.

 

계약서

인감증명서를 관할 주민센터에서 대리발급받을 수 있다.

인감증명서는 발급후 3개월만 효력이 있다.

위임장을 등기로 중개사에게 보낸다. 대리인으로 활용한다.

중개사는 이름에 맞게 막도장을 만들어서 활용가능하다.

계약서는 중개사에게 등기로 받는다.

 

잔금 납부

등기부등본 확인 후 소유자 계좌로 이체한다. 등기확인 700원

돈은 절대 중개사에게 맡기지않고 매수자 매도자 임차인 임대인 등에게 직접 전달한다.

 

부동산 임차

중개사와 전화로 한다.

임차인 집보여주기는 부동산에게 키를 맡길경우 다른 부동산과 공유가 안될 수 있다.

번호키를 활용하거나 키를 해당 관리사무소에 맡길 수 있다.

임대차계약서도 위임장을 등기로 보내서 대리작성 가능하다.

계좌이체로 돈을 받는다.

 

부동산 매도

매매시세 조사하기 : 중개사에게 전화로 조사한다.

매도계약서 작성도 위임장을 등기로 중개사에게 보낸다.

이때 인감증명서는 일반 인감이 아닌 부동산 매도용 인감증명서를 사용해야 한다.

위임장에 해당 부동산은 누구에게 매도해야한다는 내용을 적는다.

계약서는 중개사에게 등기로 받는다.

계좌이체로 매도금을 받는다.

 

모든 시스템은 갖춰져있다.

내가 쓰지 않을 뿐

내가 직접 간다고 해결되는 건 없다.

나는 결정만 한다.

사람을 잘 써야 한다.

믿을 만한 사람을 구별하는 감을 키워라.

 

 

출처 : 부동산읽어주는남자 정태익대표

 

LTV, DTI, DSR 용어란?

LTV : 담보인정비율 Loan To Value ( Loan / Value = 대출금액 / 자산가치 ) 

담보물의 자산가치 대비 담보가능한 최대비율을 의미합니다.

보통 아파트의 경우 LTV 는 70%가 적용됩니다.

시세의 기준은 감정가나 KB시세등을 적용합니다.

예) LTV가 70% 일 경우 시세가 3억 아파트일 경우 대출은 2억천까지 대출이 가능

LTV는 은행의 재무건전성을 위한 제도입니다. 즉 은행은 10억짜리 부동산이 7억까지 떨어져도 안전하다. 즉 재무건전성상 문제가 없다고 볼 수 있습니다.

 

DTI : 총부채상환비율 Debt To Income ( Debt / Income = 상환원리금 / 년수입)

년간 갚아야할 원금+이자를 년수입으로 나눈 것입니다.

보통 DTI 는 60%가 적용됩니다.

DTI는 개인의 대출상환을 제어하여 대출도 수입에 따라 제한을 두겠다는 것입니다.

예) DTI가 60% 일 경우 연봉이 5000만원의 수익인 사람의 대출은 최대 3000만원

단, 거치기간이나 상환기간으로 조절할 수 있는 여지가 있습니다.

또한 타대출의 원금은 제외하고 이자만 계산합니다. 즉, 여러은행을 활용하면 더 많이 대출을 할 수 있습니다.

그렇기 때문에 상한선을 빠져나갈 수 있는 방법이 있습니다.

 

DSR : 총부채원리금상환비율 Debt Service Ratio (Debt Service / Income = 총상환원리금 / 년수입)

DTI가 빠져나갈 구멍이 있기 때문에 더욱 강력하게 규제할 수 있는 DSR이 생겼습니다.

DSR은 모든 대출금에 대한것을 전부 포함합니다. (원금+이자+타은행+부동산대출+자동차대출+ 기타등등)

DSR은 신용대출 150%, 담보대출 200% 를 하고 있습니다. (국민은행 적용기준)

예) 연수입이 5000만원인 사람은 1년에 1억까지 대출을 갚을 수 있습니다.

현실적으로 수입보다 많은 부채를 상환하기는 어렵기 때문에 유명무실하다는 주장도 있습니다.

DTI는 타부재 원금은 제외, DSR은 모든부채 원금포함 으로 차이를 이해하시면 되겠습니다.

이 또한 일시상환이 아닐경우 어느정도 빠져나갈 수 있는 방법이 있습니다.

여기에서 집단대출과 마이너스통장 제외 움직임도 있습니다.

 

모두 은행이 원해서 하는 규제가 아닙니다.

은행은 대출을 많이해줄수록 매출이 증가합니다. 정부가 부동산시장을 제어하기 위한 규제입니다.

국가적으로 가계부채가 크고 급증하기 때문에 정부가 규제를 하는 것입니다.

 

출처 : 부동산읽어주는남자 정태익대표

 

 

 

선배의 이끌림에 올해 시작하게 된 마라톤 어찌저찌 하다보니 세번째 참석이 되었다

첫번째는 3월 19일 동아일보 국제마라톤에 얼떨결에 시작했다 기록을 떠나서 완주했다는 벅찬기쁨을 맛봤다 특히 올림픽 경기장 트랙을 한바퀴 돌며 대형 전광판에 나오는 내모습을 보고 피니쉬 라인을 통과하는 기분은 정말 말로 표현할 수 없을정도로 황홀했다

두번째는 장애우 돕기사랑 봉사활동 일념으로 뛰었으나 초반에 잠깐 걸었더니 패이스을 완전히 잃어버려 한시간 십분대로 골인했다 중간에 한번 포기하면 엄청 힘들다는것을 깨달았고 많이 아쉬웠다

그리고 세번째, 오늘은 한시간 안으로만 들어오자 라고 마음을 다지며 시청역에 도착했다

선배 누님께서 선크림도 빌려주시고 바나나도 주셔서 낼름 감사하다며 받았다

하프를 뛰는 선배와 마지막에 만나자고 인사를 나누고 출발선에 섰다

5km 지점 7km 지점에서 쉬고싶은 충동이 일었으나 꾹참고 뛰었는데 8km 지점부터는 속도가 떨어져 계속 추월당했으나 멘탈이 무너지지 않게 잘 정신줄 꽉잡고 내 페이스에 집중했다

피니쉬 통과후 58분 기록을 받았다 너무 기뻤다




결승선 통과의 짜릿함은 여전히 감동적이었다 다음에도 또 도전을 이어가야겠다 ㅎㅎ


import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.StringTokenizer;


public class Exam1520 {

static int N, M;

static int D[][], grid[][];


public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

StringTokenizer st = new StringTokenizer(br.readLine());

N = Integer.parseInt(st.nextToken());

M = Integer.parseInt(st.nextToken());


grid = new int[N + 1][M + 1];

D = new int[N + 1][M + 1];

for (int i = 1; i <= N; i++) {

st = new StringTokenizer(br.readLine());

for (int j = 1; j <= M; j++) {

int a = Integer.parseInt(st.nextToken());

grid[i][j] = a;

}

}

for(int i=1;i<=N;i++)

for(int j=1;j<=M;j++)

D[i][j] = -1;

goGrid(1, 1);

System.out.println(D[1][1]);

}


static int goGrid(int x, int y) {

if (D[x][y]!=-1)

return D[x][y];

if (x == N && y == M)

return 1;

D[x][y] = 0;

if (y != M && grid[x][y + 1] < grid[x][y])

D[x][y] += goGrid(x, y + 1);

if (x != 1 && grid[x - 1][y] < grid[x][y])

D[x][y] += goGrid(x - 1, y);


if (y != 1 && grid[x][y - 1] < grid[x][y])

D[x][y] += goGrid(x, y - 1);


if (x != N && grid[x + 1][y] < grid[x][y])

D[x][y] += goGrid(x + 1, y);



return D[x][y];


}


}


'SW > 알고리즘' 카테고리의 다른 글

간편 조합 Combination (java)  (0) 2017.08.29
위상정렬 Topological sort  (0) 2017.08.18
이진탐색 binary search  (0) 2017.08.08
재귀호출 Recursive call  (0) 2017.01.22
삼각형의 넓이  (0) 2017.01.13

간편 조합

{A,B,C,D} 4개의 원소중 3개를 뽑을 조합은 어떻게 될까?

조합은 뽑은 원소가 중복되면 안되기 때문에 앞에서부터 차례대로 원소를 뽑아본다.

단순하게 for 를 3번 돌면 된다.

// 4개중 3개를 뽑을경우

int n = 4;

for(int i=0;i<n;i++)

for(int j=i+1;j<n;j++)

for(int k=j+1;k<n;k++){

System.out.print(array[i]+" "+array[j]+" "+array[k]);

System.out.println();

}

결과

A B C

A B D

A C D

B C D


2개를 뽑을땐 for를 2번 반복, 4개를 뽑을땐 for를 4번 반복한다. 몇 개를 뽑을지 모르는데 매번 이렇게 할 수 없다. 또한 for 문이 비슷하게 반복되지 않는가.

코드를 잘 보면 for 한번이 원소 하나를 고르는 행위를 하는 것임을 알 수 있다.

그렇다면 for문으로 원소 한개를 고르고 다시 자기 자신을 호출해 남은일을 넘기는 재귀를 구성해본다. 

위 for 문이 몇개를 뽑을지에 따라 반복된다. 즉 n개중 r개를 뽑는다면 for 는 r만큼 반복되어야 한다.

하나를 뽑으면 그다음에 뽑을 수 있는 개수는 한개 줄어든다. 그렇게 뽑다가 뽑을 수 있는 개수가 0이 되면 r개만큼 뽑은것이다. 더이상 뽑지 않고 출력한다.

이후에는 마지막에 뽑았던 것을 빼놓고 다음에 뽑을 수 있는 것을 뽑는다. 다음것도 뽑을 것이 없다면 다음것을 뽑을 수 있을때까지 마지막을 뺀다. 


조합의 작업을 다음 입력들의 집합으로 정의한다.

1. 원소들의 총 개수

2. 더 골라야 할 원소들의 개수

3. 지금까지 고른 원소들의 번호

위 3가지를 고려해 for 반복 for 문 작업을 하는 재귀함수로 구성한다.


import java.util.Stack;


public class Combination_1 {

static char array[] = {'A','B','C','D'};

public static void main(String[] args) {

Stack<Integer> st = new Stack<Integer>();

for(int i=1; i<=array.length; i++){

System.out.println(i+"개 뽑을경우 조합");

pick(array.length, st, i);

}

}

static void pick(int n,Stack<Integer> st,int r){

if(r==0)

printPick(st);

int smallest = st.isEmpty() ? 0 : st.lastElement() + 1; 

for(int next = smallest; next < n; next++){

st.push(next);

pick(n,st,r - 1);

st.pop();

}

}

static void printPick(Stack<Integer> st){

for(int i:st)

System.out.print(array[i]+" ");

System.out.println();

}

}

결과 

1개 뽑을경우 조합

2개 뽑을경우 조합

A B 

A C 

A D 

B C 

B D 

C D 

3개 뽑을경우 조합

A B C 

A B D 

A C D 

B C D 

4개 뽑을경우 조합

A B C D 

'SW > 알고리즘' 카테고리의 다른 글

내리막길  (0) 2017.09.13
위상정렬 Topological sort  (0) 2017.08.18
이진탐색 binary search  (0) 2017.08.08
재귀호출 Recursive call  (0) 2017.01.22
삼각형의 넓이  (0) 2017.01.13


위상정렬 Topological sort

일의 순서가 정해져 있을때 순서대로 정렬하는 것. (예: 수강신청시 선수과목, 스타크래프트 빌드 테크트리)


순서를 정해야하기 때문에 그래프에서 cycle이 존재하면 안된다. 또한 순서가 있기 때문에 방향이 있어야 한다.

DAG(Directed Acyclic Graph) 가 되어야 위상정렬을 할 수 있다.

즉, 방향이 있으며 사이클이 없는 그래프여야 한다.


위상정렬 구현 방법 (BFS 탐색)

1. 이 그래프가 사이클이 있는지 확인한다.

(보통의 경우 문제를 해결하는 경우에는 이 과정이 있다면 위상 정렬 자체를 시도하지 않을 것이지만) 

2. 현재 정점에 들어오는 간선이 없다면 BFS라면 큐에 담아준다.

3. 큐에서 front원소를 빼고 front에 연결되어있는 정점들 간의 간선을 모두 삭제해준다. 

이때 해당하는 다음 정점에 들어오는 간선이 없다면 큐에 담아준다.

이 과정을 정점의 개수만큼 반복한다.

4. 결국 이 과정을 반복하는 동안 큐에서 빠지는 front 순서대로가 위상 정렬의 결과이다.

출처: http://www.crocus.co.kr/716 [Crocus]


- Java 구현 소스 -

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.Collections;

import java.util.LinkedList;

import java.util.Queue;

import java.util.StringTokenizer;


public class TopologicalSort {

static int Ts, V, E, edgecount[];

static String answer;

static ArrayList<Integer> graph[];

public static void main(String args[]) throws Exception {

// System.setIn(new FileInputStream("sample_input.txt"));

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

StringTokenizer st = new StringTokenizer(br.readLine());

Ts = Integer.parseInt(st.nextToken());

for(int T=1;T<=Ts;T++){

// init

answer = "";

st = new StringTokenizer(br.readLine());

V = Integer.parseInt(st.nextToken());

E = Integer.parseInt(st.nextToken());

graph = new ArrayList[V+1];

edgecount = new int[V+1];

for(int i=1;i<=V;i++)

graph[i] = new ArrayList<Integer>();

// input

for(int i=1;i<=E;i++){

int s,e;

st = new StringTokenizer(br.readLine());

s = Integer.parseInt(st.nextToken());

e = Integer.parseInt(st.nextToken());

graph[s].add(e);

edgecount[e]++;

}

// Sort 같은레벨일경우 오름차순으로 정렬한다.

for(int i=1;i<=V;i++)

Collections.sort(graph[i]);

// set start point

ArrayList<Integer> root = new ArrayList<Integer>();

for(int i=1;i<=V;i++){

if(edgecount[i]==0)

root.add(i);

}

// call topological sort

ArrayList<Integer> result = topologicalSort(root);

// make output

for(int vertax:result)

answer += vertax+" ";

// print screen

System.out.println("#"+T+" "+answer);

}

}

// 위상정렬

static ArrayList<Integer> topologicalSort(ArrayList<Integer> root){

ArrayList<Integer> result = new ArrayList<Integer>();

Queue<Integer> que = new LinkedList<Integer>();

boolean visited[] = new boolean[V+1];

// set root

for(int vertax:root)

que.add(vertax);

while(!que.isEmpty()){

int vertax = que.poll();

result.add(vertax);

if(!visited[vertax]){

visited[vertax] = true;

for(int next:graph[vertax]){

edgecount[next]--; // 간선 차감

if(edgecount[next]==0) // 간선이 0인것은 다음 root 이므로 queue add

que.add(next);

}

}

}

return result;

}

}


/* input example

1

5 6

2 1

2 3

3 4

3 1

1 4

5 4

*/


'SW > 알고리즘' 카테고리의 다른 글

내리막길  (0) 2017.09.13
간편 조합 Combination (java)  (0) 2017.08.29
이진탐색 binary search  (0) 2017.08.08
재귀호출 Recursive call  (0) 2017.01.22
삼각형의 넓이  (0) 2017.01.13

Binary Search 이진탐색

// int 배열 

int list[] = {1,3,5,10,2,11, 13,14,15,18};

System.out.println();

// int 배열 정렬

Arrays.sort(list);

for(int a:list)

System.out.print(a+" ");


// 구현된 binary search

int findindex = binarySearch(list, 11);

System.out.println();

System.out.println("index"+findindex);

System.out.println("value"+list[findindex]);


// lo : low open , hi : high interval, arr 는 항상 오름차순 정렬되어 있다는 전제하에 수행

public static int binarySearch(int[] arr, int x){

int lo = -1; int hi = arr.length; int mid;

while(lo + 1 < hi){   // lo + 1 = hi 일때 종료됨 정의에 의해 항상 lo < hi 가 성립됨

mid = (lo + hi)/2;    // 중간값 index    

if (x==arr[mid]) return mid; // 찾았을경우 index 리턴

if (arr[mid] < x) 

   lo = mid;    // 중간값이 찾고자 하는 값보다 적을때 low 값을 mid 로 설정

else

hi = mid; // 중간값이 찾고자 하는 값보다 클때 high 값을 mid 로 설정

}

return -1; // 찾지 못하였을경우(없을경우) -1 리턴

}

'SW > 알고리즘' 카테고리의 다른 글

간편 조합 Combination (java)  (0) 2017.08.29
위상정렬 Topological sort  (0) 2017.08.18
재귀호출 Recursive call  (0) 2017.01.22
삼각형의 넓이  (0) 2017.01.13
(a+b)%c = (a%c+b%c)%c 증명  (0) 2017.01.12

+ Recent posts