C#에서 XML 파일을 읽어오려면

using System.Xml 에 있는 함수를 사용하면

간단하게 읽어 올 수 있습니다.

 

단계는

1. xmlDocument 생성자를 호출

2 .읽어올 파일 경로를 로드

3. node 단위로 List 로 변환 후 읽어 오시면 됩니다.

 

코드 예시

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;   //MessageBox.Show() 사용시 필요
using System.Xml;             //xml 사용시 필요

namespace WindowsFormsApplication
{

    public class xmlRead
    {

        private void Read()
        {
            string temp = "";

            XmlDocument xml = new XmlDocument();

            xml.Load("D:\\test\\config.xml"); //"D:\\test\\config.xml" == @"D:\test\config.xml" 

            XmlNodeList xmlList = xml.SelectNodes("/config");

            foreach (XmlNode xnl in xmlList)
            {
                temp += xnl["Age"].InnerText;
                temp += xnl["ID"].InnerText;
                temp += xnl["Pw"].InnerText;
                temp += xnl["Name"]["성"].InnerText;
                temp += xnl["Name"]["이름"].InnerText;
            }
            MessageBox.Show(temp);
        }


    } //class
} //nameSpace

 

 

 

[config.xml]

-<config>
    <Age>20</Age>
    <ID>ID</ID>
    <Pw>password</Pw>
    <Name>
        <성>홍</성>
        <이름>길동</이름>
    </Name>
</config>

<Name> 내부 Child <성> 의 값을 읽어오고 싶을때는 xnl["Name"]["성"].innerText 처럼 중첩해서 [] 형태로 지정해주면 됩니다.

 

 

FileSystemWatcher 는 특정 폴더 경로(디렉토리)의 모든 파일

파일이 생성되거나 변경되면 함수 호출을 해줍니다.

 

우선 사용법은

1. FileSystemWatcher 생성자 호출

2. 감시할 폴더 설정(디렉토리)

3. 감시할 항목들 설정 (파일 생성, 크기, 이름., 마지막 접근 변경등..)

4. 감시할 이벤트 설정 (생성, 변경, 삭제..)

5. FIleSystemWatcher 감시 모니터링 활성화

6. 감시할 폴더 내부 변경시 event 호출

 

위 내용을 코드로 구현하면 ...

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; // FileSystemWatcher 은 System.IO 안에 있습니다. using System.Windows.Forms; namespace WindowsFormsApplication { public class FileWatcher { string EqpDirPath = "D:\test\"; private void initWatcher() { watcher = new FileSystemWatcher(); //1. FileSystemWatcher 생성자 호출 watcher.Path = EqpDirPath; //2. 감시할 폴더 설정(디렉토리) // 3. 감시할 항목들 설정 (파일 생성, 크기, 이름., 마지막 접근 변경등..) watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size | NotifyFilters.LastAccess | NotifyFilters.CreationTime | NotifyFilters.LastWrite; //감시할 파일 유형 선택 예) *.* 모든 파일 watcher.Filter = "*.*";

 

watcher.IncludeSubdirectories = true; // 4. 감시할 이벤트 설정 (생성, 변경..) watcher.Created += new FileSystemEventHandler(Changed); watcher.Changed += new FileSystemEventHandler(Changed); watcher.Renamed += new RenamedEventHandler(Renamed); // 5. FIleSystemWatcher 감시 모니터링 활성화 watcher.EnableRaisingEvents = true; } // 6. 감시할 폴더 내부 변경시 event 호출 private void Changed(object source, FileSystemEventArgs e) { MessageBox.Show(e.FullPath); } private void Renamed(object source, RenamedEventArgs e) { MessageBox.Show(e.FullPath); }

 

 

 

코드 상단 주석처럼  

FileSystemWatcher 은 using System.IO 를 선언해 주셔야 합니다.  

initWatcher() 함수를 실행시키면  

주석 번호대로 1~ 5번까지 initWatcher() 함수가 실행이 된 상태에서  

D:\test\ 해당 파일 경로에 파일 또는 폴더가 생기면 바로 Changed() 이벤트가 호출됩니다.  

호출될때 담겨지는 파라미터 FileSystemEventArgs e 에서 e.Fullpath 를 꺼내오면 

생성된 파일의 전체 경로를 가져 옵니다. 

  예) D:\test\새 텍스트 문서.txt  

이렇게 FileSystemWatcher 를 사용해서 해당 폴더를 실시간으로 감지 모니터링하는 기능을 구현 했습니다.  

 

다음 포스팅에선 이렇게 폴더를 감지해서  

FTP 파일 서버로 업로드까지 확장시켜 볼게요 

 

 

 

20161213


*이문제는 dovelet 에 있는 알고리즘 문제입니다.

 

지하 차도/truck

프로그램 명: truck

 

제한시간: 1 초

제 1 지하차도 를 지나면 2 지하차도 를 지나면 3 지하차도로 이어져있다.

차의 높이가 168 인 경우 세 지하차도의 높이가 주어질 때 지하차도에 충돌하지 않고 건널수 있는지 ( NO CRASH ) 아니면 지하차도에 부딪히는지 ( CRASH X )를 알아내는 프로그램을 작성하는 것이 문제이다.

입력

지하차도의 높이가 입력으로 주어진다. 각 지하차도의 높이는 0 에서 300 이다.

출력

세 개의 지하차도를 무사히 빠져 나가면 "NO CRASH" 를 출력하고 아니면 "CRASH X" 를 출력한다.

즉 지하차도의 높이는 168 이하이면 부딪히고 , X 는 최초로 부딪히는 지하차도의 높이이다.

입출력 예

입력

180 160 170

출력

CRASH 160
출처:South Central USA 2003


제 풀이



1) 풀이1

import java.io.PrintStream;
import java.util.Scanner;

 

 

public class Main {
 
 public static void main(String[] args){

  Scanner sc = new Scanner(System.in);
  
  int carRoad1 = sc.nextInt();
  int carRoad2 = sc.nextInt();
  int carRoad3 = sc.nextInt();
    
  String result = "CRASH ";
  

if(carRoad1 <= 168){       result += carRoad1;
  }else if(carRoad2 <= 168){      result += carRoad2;
  }else if(carRoad3 <= 168){      result += carRoad3;
  }else{                          result = "NO CRASH";
  }
  

System.out.println(result);
 

}
}

 

1) 풀이2

import java.io.PrintStream;
import java.util.Scanner;

 

public class Main {
 
 public static void main(String[] args){
  
  Scanner sc = new Scanner(System.in);
  
  int carRoad1 = sc.nextInt();
  int carRoad2 = sc.nextInt();
  int carRoad3 = sc.nextInt();
     int temp = 0;

     if((temp = carRoad1) > 168 &&(temp = carRoad2) > 168 && (temp = carRoad3) > 168){
   System.out.println("NO CRASH");
  }else{
   System.out.print("CRASH " + temp);
  }
 }
}

 

 

* 개인적인 풀이 내용입니다. 정해진 정답은 없습니다.


 오늘의 풀이는 2가지 입니다.

제가 풀었던 과정은 풀이1 이고 다른 분들 코드에서 참신한 코드가 있어서 풀이2 로 비슷하게 구현해 봤습니다.

 

1번 풀이) 풀이 1의 내용은 입력 받은 3개의 값을 크기를 비교해서 168 보다 같거나 작으면 CRASH + 값 으로 출력하고

모두 기준보다 크면 "NO CRASH" 를 출력합니다.

최초로 출동한 값을 출력하기 위해서 if , else if , else 순서를 이용해서 최초 충돌되는 값을 출력하게 구현 했습니다.

 

2번 풀이) 풀이 2번의 내용은 and 연산자(&&) 를 매우 매력적으로 활용한 코딩이라서 비슷하게 구현해 봤습니다.

168 값과 비교하는 값을 매번 임시 temp 변수에 넣어서 비교를 합니다. 

그리고 && 연산자에서 false 가 나오면 뒷 부분의 비교는 하지 않습니다.

그래서 제일 처음 false 가 판단 될때 temp 값에 들어가는 값이 최초의 충돌 값인 것이죠

 

    그럼 오늘도 열공하세요!

 

20161213


*이문제는 dovelet 에 있는 알고리즘 문제입니다.

 

해킹 회사/hack

프로그램 명:hack

당신은 해킹회사의 사장이다. 이 회사는 친구들을 골리는데 사용하는 악의적인 소프트웨어를 개발하여 이제 출시를 눈 앞에 두고 있다.

가능한 더 많은 제품을 팔기위해 홍보를 고려하고 있다.

홍보를 할 경우의 수입과 하지 않을 경우의 수입을 알때

  • 홍보를 하는 것이 유리한가 아니면
  • 하지 않는 것이 유리한가 아니면
  • 하던 안 하던 수입은 관계가 없는가를 알고자 한다.

입력

입력은 세 개의 정수 r , e ,c 가 주어진다.

  • r 은 홍보를 하지 않을 경우의 수입
  • e 는 홍보를 할 경우의 수입
  • c 는 홍보 비용

출력

세 가지 중 하나를 출력한다.

  • "advertise" : 홍보를 할 경우 유리한 경우
  • "do not advertise" : 차라리 홍보를 하지 않을 경우 유리한 경우
  • "does not matter" : 하던 , 안하던 수입이 같은 경우

입출력 예

입력

0 100 70

출력

advertise

입력

100 130 30

출력

does not matter

출처: Nordic 2006

 


제 풀이



1) 풀이

import java.io.PrintStream; import java.util.Scanner;

public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int b = sc.nextInt(); int a = sc.nextInt(); int c = sc.nextInt(); String temp = ""; if(b > a-c ){ temp = "do not advertise"; }else if(b == a-c){ temp = "does not matter"; }else{ temp = "advertise"; } System.out.println(temp); } }

 




* 개인적인 풀이 내용입니다. 정해진 정답은 없습니다.


  3가지 경우를 구하는 문제 입니다.

   홍보를 해서 수익이 높은 경우 , 홍보를 안해서 높은 경우, 홍보랑 상관 없는 경우 이렇게 3가지 경우가 나오네요.

   자 그럼 입력 되는 값은 3가지 입니다. 홍보를 안했을때 b, 홍보를 했을때 a , 홍보 비용 c

   그럼 이 값들을 가지고  홍보 효과가 있는지를 판단 해야겠죠

   홍보를 했을때 수익에서 홍보 비용을 뺀값과 홍보를 안했을 때 수익을 비교하면 알 수 있습니다. 

   [홍보를 안했을때 VS 홍보를 했을때 - 홍보 비용]    으로 판단을 하는거죠

    이 판단으로 

    

    홍보를 안했을때 가 더 높은 경우

    홍보를 한 경우가 더 높은 경우

    홍보를 안했을때와 했을때가 같은 경우

    

    로 나눠서 판단하면 되는거죠


    네 아직은 어렵지 않네요. 그럼 모두 열공!

 

 

 



  

 

20161209


*이문제는 dovelet 에 있는 알고리즘 문제입니다.

 

수영장 가는 날/swimming

프로그램 명: swimming

제한시간: 1 초

컴돌이는 월,수,금 수영을 신청했습니다.

  1. 월요일
  2. 화요일
  3. 수요일
  4. 목요일
  5. 금요일
  6. 토요일
  7. 일요일

만약의 경우를 위해 수영장 가는 날인지 아닌지를 체크해 주는 프로그램을 다음과 같이 작성하기로 했습니다.

입력

1 에서 7 사이의 자연수가 입력으로 주어진다.

출력

수영장 가는 날이면 enjoy , 아니면 oops 를 출력

입출력 예

입력

1

출력

enjoy

입력

4

출력

oops

 

 


 


제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;
public class Main {
 
 Scanner sc = new Scanner(System.in);
 PrintStream p = System.out;
 static int temp = 0;
 public static void main(String[] args)
 {
  
  Main ma = new Main();
  ma.input();
  
     if(temp == 1 || temp ==3 || temp == 5) System.out.println("enjoy");
     else System.out.println("oops");
    
 }
 
 void input()
 {
  temp = sc.nextInt();
 }
}

 




* 개인적인 풀이 내용입니다. 정해진 정답은 없습니다.


   1부터 7까지 숫자 중에서 1,3,5 일경우 "enjoy" 그 이외의 경우는 "ooops" 를 출력하는 문제 입니다.

   저는 if 문 안에 OR 연산자( || ) 를 사용해서 1, 3, 5 인경우 "enjoy" 를 출력하고 그 이외의 경우는 모두

   "oops" 를 출력하게 해줬습니다.

  

   다른 분들의 경우는 1, 3, 5 가 모두 홀수 이기 때문에 2로 나눈 나머지가 1 일때 enjoy 를 출력하도록 했습니다.

   하지만 7 인경우는 피하기 위해서 입력값이 7보다 작은 경우를 추가로 작성 하신 분들이 많습니다.

    if(temp %2 ==1 && temp <7)  이런식으로 간결해 졌네요.

 

 

 

 

 



아래 흰트 개념이 있습니다. 




흰트 개념



수영장 가는날 hint 논리 연산자를 연습하는 문제 입니다.

논리연산자는 세 가지

  • and 연산자(&&): 모두가 참인경우 참
  • or 연산자(||): 하나라도 참이면 참
  • not 연산자(!): 참을 거짓으로 , 거짓을 참으로 변경

이 문제에서는 or 연산자를 사용하면 됩니다.

1
2
3
4
5
6
7
int a;
 
if ( a == 1 || a == 3 || a == 5 ) {// a 값이 1 , 3 ,5 중에 하나이면 참
   ....
}else{
 .....
}

다음 형태로는 사용하지 못합니다.

1
a == 1 || 3 || 5  (x)

 



  

 

20161209


*이문제는 dovelet 에 있는 알고리즘 문제입니다.

 

음표/coci note 

프로그램 명: coci_note

 

제한시간: 1 초

C 장조의 음계는 8 개로 나타내어진다(c d e f g a h C). 이를 1 에서 숫자 8 로 약속을 한다.

1 에서 8 까지의 수가 임의의 순서로 한 번 나오는 수열이 주어질 때 이 수열이 오름차순(ascending)인지 내림차순(descending)인지 아니면 섞여(mix) 있는지 를 알아내는 문제이다.

입력

1 에서 8 까지의 수가 임의의 순서로 한 번 나타난다.

출력

ascending , descending , mixed 중 하나를 출력한다.

입출력 예

입력

1 2 3 4 5 6 7 8

출력

ascending

입력

8 7 6 5 4 3 2 1

출력

descending

입력

8 1 7 2 6 3 5 4

출력

mixed
출처: coci 2009/2010 contest1 1/6

 

 

 


 


제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;

public class Main {
 
 Scanner sc = new Scanner(System.in);
 PrintStream p = System.out;
 
 int [] input = new int[8];
 int ascending = 0;
 int descending = 0;
 String result = "";
 
 public static void main(String[] args)
 {
  
  Main ma = new Main();
     for(int i =0; i<8; i++)
     {
      ma.input(i);
     }
     ma.result();
 }
 
 void input(int i) {
  input[i] = sc.nextInt(); 
 }
 
 void result(){
  for(int a = 0; a < input.length-1; a++)
  {
   if(input[a] < input[a+1]) ascending = 1;
   else descending = 1;
  }
  int temp = ascending-descending;
  
  if(temp == 0) result = "mixed";
  else if (temp == 1) result = "ascending";
  else result = "descending";
  
  System.out.println(result);
 }
}




* 개인적인 풀이 내용입니다. 정해진 정답은 없습니다.


   입력한 8개의 값을 오름차순 과 내림차순 그 이외 경우 'Mixed' 를 구별하는 문제 입니다. 

   2층 문제는 If (조건문)으로만 해결하는게 좋긴 하지만 너무 for 문을 쓰고 싶게 만드는 문제 였습니다.

   저는 for 문을 이용해서 오름차순 1개 내림차순 1개 변수를 만들어줘서 발생할때 1을 입력해주고

   마지막에 연산한 결과로 3가지 경우를 판단하는 코드를 작성했습니다.

  다른 분들 code 를 보면

   if( 1번 값 < 2번값 && 2번값 < 3번값 ....) 반복해서 if, else if, else 로 for(반복문) 없이 푼 분들도 있었습니다.

   계속 반복해서 비교 해줘야 한다는 생각에 and 연산자(&&)를 생각 못 했던 것 같네요.

  

안녕하세요!

취업한지 1년이 되어가는 사회 초년생입니다.
이제 돈을 벌기 시작해서 그런지 빨리 목돈만들어서
여기저기 투자도 하고 수익도 내고 싶더라구요 ㅎㅎ

하지만 목돈도 이제 모으고 있는 중이라서 꿈도 못 꾸고 있었는데요. 우연히 p2p 재테크에 대해서 알게 되었습니다.

전문적인 용어는 익숙하지 않아서 초딩 수준으로 설명하자면 은행보다 비싸고 (5%이상) 2금융권 (20%이하) 보다 싸게 대출해주는게 p2p대출 입니다. 대출을 희망하는 사람이 생기면 투자자를 모으는데요 여기서 투자자에게 은행보다 높은 금리를 적용해 줍니다. (10% 내외) 이런 이점 때문에 대출을 희망하는 사람이나 투자자에게 요즘 인기가 있는 핀테크이고 저 또한 시도해보게 되었죠
하지만 수익에서 27.5%세금을 가져가서 그렇게 대박까지는 아닌것 같아요 대부업으로 분류되고 그렇다고 하네요.

그리고 여러개의 상품을 (보통 100개) 소액으로 나눠서 투자를 하기 때문에 위험부담도 줄게되는 장점이 있어요

자세하게 알고싶으면 전문가의 글을 찾아보시고 ㅎ

이런 이유로 은행보다 높은 금리인 p2p 투자를 시도하게 되었습니다. 매달 적금들고 통장에 남아있는 돈이 300만원 조금 넘게 있어서 2개의 p2p 회사에 각각 100만원과 200만원으로 투자를 했습니다.

투자 방식은 어렵지 않아요 포트폴리오라는 대출건 묶음으로 100개 정도되는 대출건에 투자금액을 쪼개서 투자하게 됩니다. 그리고 이런 과정은 자동으로 설정되어 있습니다.

꼭 큰돈을 굴리기 보다는 이정도 금액으로 다양한 재테크를 시도해보고 경험을 쌓는것도 좋은것 같아서 처음으로 투자를 시도하게 되었습니다.ㅎ ​


투자 완료한 화면

​​​


렌딧 세후 수익이고 27.5% 세금 적용전 입니다.



다른하나는 어니스트펀드 세전 금액입니다.

아직은 아무런 내용이 없죠 오늘 투자했으니깐요ㅎㅎ

저는 이렇게 렌딧과 어니스트펀드에 총 300만원을 투자 했습니다 . (그나마 알려진 두곳을 선정했어요) 남들이 보기엔 너무 소액일지 모르지만 뭐 저에겐 소중한 피같은 돈이랍니다ㅎㅎ

이제부터는 원금과 이자가 잘 들어오는지는 수익은 어떤지 후기 남기도록 하겠습니다. 처음이라 너무 걱정되네요
내돈 ㅜㅠ


20160502

윈도우 원격 접속(Window Remote Connection)




안녕하세요.  이번 포스팅은 윈도우 원격 접속 방법입니다.


윈도우 원격 접속 을 하기 위해서는


1. 상대방 원격 허용 & 방화벽 설정 헤제


2. 상대방 IP 주소를 이용해서 원격접속 시도




상대방 PC 환경설정부터 진행할게요ㅎ

우선 상대방 PC 의 원격 허용 설정방화벽을 해제 하겠습니다.




1. 원격 허용 방법





위 사진과 같이 제어판에서 [빨간색 화살표]가 가리키는 곳에 시스템 을 입력해주세요.









그럼 위 사진과 같이 [빨간색 화살표]가 가리키는 곳에 시스템 항목이 생깁니다. 시스템을 클릭해주세요.












System[시스템] 에 들어가시면 [빨간색 화살표]가 가리키는 원격 설정 를 클릭해 주세요.












위 화면에서 [빨간색 화살표]가 가리키는 부분들을 체크 해주시고 적용 클릭, 확인 클릭해 주세요.







이제 방화벽 설정을 해제 할게요 ㅎ





위 사진과 같이 제어판에서 [빨간색 화살표 1번]가 가리키는 곳에 방화벽 을 입력해주세요.
[빨간색 화살표 2번] 처럼 Window 방화벽을 클릭해주세요.










위 사진과 같이 Window 방화벽에서 [빨간색 화살표]가 가리키는 곳에 Windows 방화벽 설정 또는 해제 을 클릭해주세요.











위 사진과 같이 Window 방화벽에서 [빨간색 화살표]가 가리키는 곳들처럼 사용 안 함 으로 변경해주시고 확인 을 클릭해주시면 됩니다.














이제 다른 PC 에서 원격으로 접속하는 방법을 알려드릴게요.



2. 원격 접속 방법







윈도우 하단 왼쪽에 보시면 [빨간색 화살표 1번] 웹 및 window 검색 란에 mstsc 를 입력해주세요.

그럼 [빨간색 화살표 2번] 처럼 원격 데스크톱 연결 을 클릭 해주세요.










 


원격 데스크톱 연결 창이 나오셨으면


컴퓨터(C): [빨간색 화살표] 란에 원격으로 들어가고자 하는 PC 의 IP 주소 를 입력하고

연결 클릭 해주세요.










그럼 상대방 컴퓨터의 [빨간색 네모칸] Window IDPW 를 입력하고 확인을 클릭하시면 됩니다.

(단 PW는 반드시 설정되어 있어야 합니다.)











예(Y)[빨간색 네모칸] 를 클릭해주세요.












 

IP 주소 + 원격 데스크톱 연결 윈도우창이 나오시고 상대방 PC의 바탕화면이 보이시나요?

그럼 정상적으로 원격 접속을 하신겁니다.

같은 사무실이나 공유기를 사용하는 환경에서 원격 접속 가능한 방법이였습니다.


집과 사무실 또는 한국과 중국 같이 먼거리인 경우에는 팀뷰(TeamView) 처럼 다른 프로그램으로

원격 접속을 할 수 있습니다. (팀뷰에 대한 자세한 내용은 패스!)

  

따라하시느라 수고하셨어요 ㅎ





20151214

RabbitMQ 윈도우 설치[3] 관리 플러그인(RabbitMQ management install) [step 3]


이전 글까지해서 언랭RabbitMQ server 를 설치했습니다.

하지만 데이터를 손쉽게 확인하기 위해서 관리 플러그인을 설치하면 사용하기 편하기 때문에

관리 플러그인을 설치하도록 하겠습니다.





window 탐색기에서 사진과 같은 경로에 [빨간색 화살표] 가 가리키는

RabbitMQ Command Prompt (sbin dir) 를 실행해 주시거나





(윈도우 10기준) 바탕화면 왼쪽 아래에서

RabbitMQ Command Prompt (sbin dir) 를 찾아 실행해 주세요.

(아니면 cmd 창에서 아래 사진과 같은 경로를 찾아가 주셔도 됩니다.)






이런 화면이 나왔나요?




그럼

rabbitmq-plugins enable rabbitmq_management

를 입력해 주세요.





그럼 위 화면과 같이
Plugin configuration has chaged. Restart RabbitMQ for changes to take effect.
라는 문장이 나올겁니다. 그럼 RabbitMQ 를 서비스에서 재실행 시켜 줘야 합니다.






(윈도우 10기준) 바탕화면 왼쪽 아래에서 로컬 서비스  를 찾아 실행하거나




위 그림과 같이 제어판에서 [빨간색 화살표] 가 가리키는 것처럼

제어판 > service 검색 > 로컬 서비스 보기 실행 해주세요.






서비스 창에서 RabbitMQ 를 찾고 오른쪽 마우스 클릭 다시 시작을 클릭해 주세요,


이제 부러우저를 실행시키고


http://localhost:15672


로 접속하면




위와 같은 관리 콘솔 화면이 나오게 되죠

접속을 해볼까요?

처음에는 아이디가 없겠지만

guest / guest 로 접속하면 들어갈 수 있어요.

한번 로그인을 해보면





위와 같은 로그인 화면을 볼 수 있습니다.

여기까지 RabbitMQ 설치를 모두 마쳤습니다.

따라오느라 수고했어요~!ㅎㅎ






20151214


RabbitMQ_언랭 설치(erlang download)_[step 1]


RabbitMQ 를 설치하는 과정을 설명 하겠습니다.

RabbitMQ 를 설치하기전 언랭erlang 을 먼저 설치해야 합니다.




우선 RabbitMQ 홈페이지 링크로 들어가 주세요.



홈페이지에 들어가서 [빨간색 화살표]가 가리키는 Installation 를 클릭해주세요.





홈페이지에 들어가서 [빨간색 화살표]가 가리키는 Install 란에서 자신의 OS에 맞게 클릭해주세요.





RabbitMQ 를 설치전에 Erlang 이라는것을 먼저 설치해야 하기 때문에

[빨간색 화살표]가 가리키는 Erlang windows Binary file 을 클릭해 링크로 들어가주세요.






그 다음 비트수나 목적에 맞게 다운 받아주시면 됩니다.

저는 윈도우 64비트 이기때문에

[빨간색 화살표]가 가리키는 Windows 64-bit Binary File 을 다운 받았습니다.

어떤걸 받아야 할지 모른다면 OS 환경만 확인하시고 Binary file 을 받으시면 됩니다.



download 를 마쳤으면 설치를 시작해주세요.



설치 과정은 기본설정으로 남겨두고 Next 클릭합니다.






마찬가지로 Next 클릭!





Install 클릭!




설치를 모두 진행하시면 됩니다.



RabbitMQ 설치중에서 언랭 Erlang 부분을 모두 설치 하신겁니다.

다음으로는 RabbitMQ 서버 를 설치하겠습니다.

아래 링크에서 과정을 설명 하겠습니다.








20151214

RabbitMQ 설치[2](RabbitMQ 3.3.5 download) [step 2]


RabbitMQ 를 신버전이 아닌 구버전 RabbitMQ3.3.5 를 설치 하겠습니다.


우선 RabbitMQ 홈페이지 링크로 들어가 주세요.



홈페이지에 들어가서 [빨간색 화살표]가 가리키는 Installation 를 클릭해주세요.






그 다음 신 버전이 아닌 구 버전을 설치할것이기 때문에

[빨간색 화살표]가 가리키는 Older VersionDownload 를 클릭해주세요.






구 버전들이 쭉~ 있는데 원하는 구버전을 찾아서 클릭 해주세요.

저는 3.3.5 버전을 설치할것이기 때문에

[빨간색 화살표]가 가리키는 v3.3.5/ 를 클릭해서 들어가 줍니다.





이 파일들 중에서
[빨간색 화살표]가 가리키는 rabbitmq-server-3.3.5.exe download 해줍니다.
(.exe. 파일만 받아서 설치해주면 됩니다. 각자 원하는 버전명이 맞는지 확인해주세요.)




download 가 끝났으면 설치를 시작해주세요.



설치는 기본설정으로 해주세요. 그냥 Next 클릭!





Install 클릭!






Finish 클릭!

이것으로 RabbitMQ Server 를 설치 했습니다.


RabbitMQ 는 관리 콜솔서 값들을 쉽게 확인 할 수 있는 장점이 있기 때문에

다음으로는 관리 플러그인 까지 설치를 하도록 하겠습니다.

아래 링크에서 이어서 하겠습니다.





20151209

이클립스 인디고(Indigo) 다운로드(Eclipse Indigo Download)



개발을 하다보면 버전문제로 인해서 구버전을 받아야 하는 경우가 있죠

저의 경우는 이클립스 구버전인 인디고(Indigo)를 받아야 합니다. 같이 따라해 보세요.



우선 아래 링크로 이클립스 홈페이지에 들어가주세요.


이클립스 홈페이지





그럼 위 사진과 같이 화면이 나오는데 [빨간색 화살표]가 가리키는 DOWNLOAD를 눌러주세요.









우린 최신 버전이 아닌 구버전인 인디고(Indigo)를 다운 받아야 하기 때문에 [빨간색 화살표]가 가리키는
Older Versions 를 클릭해 주세요.









구버전 목록들 중에서 [빨간색 화살표]가 가리키는 Eclipse Indigo Package 를 클릭해주세요.









대부분 이클립스를 사용하게 되면 추가 확장을 하면서 사용하기 때문에

[빨간색 화살표] 가 가리키는 Eclipse IDE for Java EE Developers클릭해주세요.







그럼 이제 [빨간색 화살표]가 가리키는 OS 환경과 비트에 맞게 다운로드 해주세요.






다운로드가 완료되면 압축을 푸시고 해당 폴더로 들어가시면





[빨간색 화살표]가 가리키는 eclipse 아이콘을 실행 시켜주세요.





이클립스 작은 화면이 뜨고 작업경로를 물어보는 창이 뜹니다.

그냥 OK 하셔도 되고 결과물이 저장될 경로를 설정해 주셔도 됩니다.








이런 화면이 나왔나요?

그럼 정상적으로 설치가 끝난겁니다! 고생하셨어요.ㅎ






20151126


*이문제는 dovelet 에 있는 알고리즘 문제입니다.



분수 크기 비교/compare 



프로그램 명: comparefrac

제한시간: 1 초


a/b 와 c/d 의 대소를 판단하는 프로그램이다.

입력

자연수 a , b, c ,d 가 입력으로 주어진다. 입력되는 수는 10000 이하이다.

출력

  • a/b > c/d 이면 1
  • a/b = c/d 이면 0
  • a/b < c/d 이면 -1

을 출력한다.

입출력 예

입력

3 4 5 6

출력

-1




제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;
  
public class Main {
   
    Scanner sc = new Scanner(System.in);
    static PrintStream p = System.out;
    double a;
    double b;
    double c;
    double d;
      
    public static void main(String[] args) {
        Main m = new Main();
        m.input();
        m.Output();
    }
    void input(){
        a = sc.nextInt();
        b = sc.nextInt();
        c = sc.nextInt();
        d = sc.nextInt();
    }
    void Output(){
        a = a/b;
        c = c/d;
        if(a > c){
            p.print("1");
        }else if(a == c){
            p.print("0");
        }else{
            p.print("-1");
        }
    }  
}




*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.


분수의 크기를 비교하는 문제 입니다. 정수형인 int 값으로 분수 형태를 저장하게 되면 몫

나눈 몫 값만 남게 되기 때문에 분수의 크기를 비교 할 수 없습니다. 그래서 저는 실수 값도 받는

Double 형으로 받아서 문제를 해결했습니다.


좀 더 수학적인 방법으로는 아래와 같은 흰트 개념을 참고해서 분수의 크기를 정수로 처리가 가능합니다.
컴퓨터에서 가능하면 실수처리를 피하는게 좋다고 하니 흰트 개념을 잘 이용해 보세요.



아래 흰트 개념이 있습니다. 




흰트 개념



분수크기 비교 hint

입력되는 수가 정수이므로 정수로 입력을 받습니다.   
1
scanf("%d %d %d %d",&a,&b,&c,&d); //  a/b , c/d
두 분수를 통분하면

b*d 의 부호는 양수이므로 분자의 a*d - b*c 가 양수인지 0 인지 음수인지만 판단하면 됩니다.

컴퓨터에서 정수처리가 가능하다면 실수처리를 피하는 게 좋습니다. 실수연산의 결과는 완전히 신뢰할수가 없습니다.






20151124


*이문제는 dovelet 에 있는 알고리즘 문제입니다.



대소 판별하기/compare 



프로그램 명: compare

제한시간: 1 초


두 정수를 입력으로 받아

  • 앞수가 뒷수 보다 크면 >
  • 앞수가 뒷수 보다 작으면 <
  • 같으면 =

를 출력하는 프로그램을 작성하세요.

입출력 예

입력

3 4

출력

<

입력

4 4

출력

=





제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;
  
public class Main {
   
    Scanner sc = new Scanner(System.in);
    static PrintStream p = System.out;
    int n1;
    int n2;
      
    public static void main(String[] args) {
        Main m = new Main();
        m.input();
        m.Output();
    }
    void input(){
        n1 = sc.nextInt();
        n2 = sc.nextInt();
    }
    void Output(){
        if(n1 > n2){
            p.print(">");
        }else if(n1 < n2){
            p.print("<");
        }else{
            p.print("=");
        }
    }
  }




*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.


간단한 조건문인 if 문법만 알면 푸는 문제 였습니다.ㅎ

풀이가 필요없죠.


20151114


*이문제는 dovelet 에 있는 알고리즘 문제입니다.



층 수 구하기/flr 



프로그램 명: flr

제한시간: 1 초


주희는 심심해서 다음과 같이 수를 쓰기 시작 했다.

이렇게 수를 쓰는 경우 어떤 수가 몇 층에 있는지가 궁금해 졌다.

참고로 100 은 7 층에 존재 한다.

입력

32 비트 정수 범위내의 값이 입력으로 주어진다.

출력

층 수를 출력한다.

입출력 예

입력

100

출력

7

♣n 개의 노드를 가지는 complete binary tree 의 depth 를 구하는 문제입니다.



제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;

public class Main {
 
	Scanner sc = new Scanner(System.in);
	static PrintStream p = System.out;
	int n;
	
	public static void main(String[] args) {
		Main m = new Main();
		m.input();
		m.Output();
	}
	void input(){
		n = sc.nextInt();
	}
	void Output(){
		boolean onoff = true;
		int flow = 1;
		while (onoff) {
			if(Math.pow(2, flow) <= n){
				flow += 1;
			}else{
				break;
			}
		}
		p.println(flow);
	}  
}



*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.


(아래에 보시면 흰트개념이 있는데(log 밑? 값이 2 )를 이용해서 쉽게 풀 수 있습니다.)

그런데 자바에선 log(밑값)2 인 함수를 Math 클래스에서 함수로 제공해주지 않고 또 log2를 어찌 구현해야 할지 몰라서 다른 방식을 이용 했습니다.

위에 문제에서 피라미드를 보시면 층이 생길때마다 그전 층의 2배만큼 커집니다. 그럼 마지막 층은 2의 n승 -1 이 제일 큰수가 되는거죠.

그럼 조건문과 반복문을 이용해서 층을 점점 증가 시키면서  n 값이 증가된 층 값보다 커질때 그전까지 증가했던 층의 수를 출력해주면 됩니다.

말이 더 어렵네요. 그림을 그리고 코드를 따라가면 어렵지 않게 이해할거라 믿어요.ㅎ



아래 흰트 개념이 있습니다. 


흰트 개념을 이용하셔도 쉽게 풀 수 있습니다.

log 를 왜 쓰는지는 아직 이해 못했습니다. 저에게 수학은 정말 힘드네요. :(





흰트 개념


[증명] n 개를 노드를 가진 complete binary tree 의 depth

레벨  에서 가질 수 있는 수의 범위는


양변에 밑을 2 로 하는 log 를 취하면 


1  을 더하면 



    혹은   







+ Recent posts