안녕하세요!

 

 

지난 포스팅 에서는 Windows Server 2012 R2 MSCS 구축 - 장애조치 클러스터 기능 설치 방법 에 대해 알아보았습니다.
[Windows Server 2012 R2 MSCS 구축 - 장애조치 클러스터 기능 설치] http://hope.pe.kr/277

 

 

이번 포스팅에서는 Windows Server 2012 R2에서 MSCS 구축 - 클러스터 만들기 방법에 대해 알아보겠습니다.

 

 

장애 조치(Failover) 클러스터 관리자 창에서, 구성 유효성 검사를 클릭합니다.

 

구성 유효성 검사 마법사 창의 시작하기 전 화면에서, 다음을 클릭합니다.

 

서버 또는 클러스터 선택 화면에서, 서버 이름 입력 후 추가를 클릭합니다.

 

다음을 클릭합니다.

 

테스트 옵션 화면에서, 다음을 클릭합니다.

 

확인 화면에서, 다음을 클릭합니다.

 

요약 화면에서, 보고서 보기를 클릭합니다.

 

장애 조치(Failove) 클러스터 유효성 검사 보고서 창에서, 범주별 결과의 설명이 성공임을 확인합니다.

 

cf) 설명이 경고여도 클러스터 만들기에는 지장이 없지만 결과 요약 페이지를 확인은 해야 합니다. 네크워크를 클릭합니다.

 

네트워크의 네트워크 통신 확인을 클릭합니다.

 

노란색으로 마킹된 부분을 확인하여 해당 이슈를 해결 하길 권장 드립니다. 아래 예제는 Public Network 만 준비되였을때 발생하는 경고 메세지 입니다.

 

쿼럼용 디스크가 준비되여 있지 않을때 발생하는 메세지입니다.

 

구성 유효성 검사 마법사 창에서, 마침을 클릭합니다.

 

클러스터 만들기 마법사 창의 시작하기 전 화면에서, 다음을 클릭합니다.

 

클러스터 관리 액세스 지점 화면에서, 클러스터 이름, IP 주소 입력 후 다음을 클릭합니다.

 

cf) 이미 사용중인 IP인 경우 다음 에러가 발생합니다.

 

확인 화면에서, 다음을 클릭합니다.

 

요약 화면에서, 보고서 보기를 클릭합니다.

 

클러스터 만들기 창에서, 클러스터 만들기가 정상적으로 진행되였음을 확인합니다.

 

마침을 클릭합니다.

 

장애 조치(Failover) 클러스터 관리자에, 새롭게 만든 클러스터 MSCS.hope.pe.kr 이 생성되였음을 확인합니다.

 

역할 메뉴 화면입니다.

 

노드 메뉴 화면입니다.

 

저장소 메뉴 화면입니다.

 

저장소 - 디스크 메뉴 화면입니다.

 

저장소 - 풀 메뉴 화면입니다.

 

네트워크 메뉴 화면입니다.

 

클러스터 이벤트 메뉴 화면입니다.

 

저장소를 소유한 노드의 파일 탐색기 화면입니다.

 

저장소를 소유하지 않은 노드의 파일 탐색기 화면입니다.

 

Active Directory 사용자 및 컴퓨터 콘솔 화면입니다.

 

DNS 관리자 콘솔 화면입니다.

 

 

 

 

다음 포스팅 에서는 Windows Server 2012 R2 MSCS 구축 - 클러스터 최적화 방법에 대해 알아보겠습니다.
[Windows Server 2012 R2 MSCS 구축 - 클러스터 최적화] http://hope.pe.kr/279

 

 

감사합니다!

  1. MSCS초기구축 2018.12.13 23:47

    안녕하세요. 님의 블로그 보고 MSCS 구축 하려고 하는데 잘 안되는 부분이 있어 문의 글 남깁니다.
    우선 저의 시나리오는 아래와 같습니다.
    1. 윈서버 2012R2 AD01, AD02 설치,
    2. AD01, AD02 도메인 서비스 설치,
    - AD01을 새포리스트 wtest.com 으로 생성하고, AD02는 기존 도메인에 컨트롤러 추가
    3. AD01, AD02 mscs 계정 만들고, domain admins 그룹 추가
    4. mscs 계정으로 failover cluster 기능 추가
    5. 클러스터 만들기
    이렇게 진행을 하였습니다.
    그런데, 클러스터 만들기 부분에서 SPN 에러나 나오면서, Active Directory 구성부분에서 유효성 검사가 fail이 발생 합니다.

    혹시 wn2012R2 서버 두 도메인 컨트롤러에 failover cluster 를 할 수 없는 건가요?(MSCS 구축이 안되는 건가요?)

  2. hi 2019.08.23 12:09

    검색어 기능
    문자열에서 숫자 추출

    /**
    * 유효한 검색어 목록을 추출하는 기능
    *
    * @param inputData List 입력데이터(검색어 목록)
    * @return List 유효한 검색어
    */
    public List<String> getValidWordList(List<String> inputData) {
    List<String> validWordList = null;
    validWordList = new ArrayList<String>();
    ////////////////////////여기부터 구현 (1) ---------------->
    String num = "1234567890";

    for(String a : inputData) {

    boolean chk = false;
    String k = null;
    for(int i = 0 ;i < num.length() ; i++) {
    char t = num.charAt(i);
    k = a;
    if(a.indexOf(t) != -1) {
    System.out.println("탈락 숫자 : "+ k); // debug
    chk = true;
    break;
    }
    }
    if(!chk) {
    validWordList.add(k);
    }
    }
    ///////////////////////////// <-------------- 여기까지 구현 (1)
    return validWordList;
    }


    /**
    * 실시간 검색어 순위 1위를 계산하는 기능
    *
    * @param validWordList List 유효한 검색어
    * @return String 실시간 검색어 순위 1위
    */
    public String getSearchWord(List<String> validWordList) {
    String searchWord = "";
    ////////////////////////여기부터 구현 (2) ---------------->
    /* Map<String, Integer> map = new HashMap<String, Integer>();
    for(String str : validWordList) {
    String key = str.toUpperCase();
    if(map.containsKey(key)) {
    int cnt = map.get(key);
    map.put(key, ++cnt);
    } else {
    map.put(key, 1);
    }
    }
    int max = 0;

    for(Iterator<String> iter = map.keySet().iterator(); iter.hasNext() ; ){
    String key = iter.next();
    int tmp = map.get(key);
    if(tmp > max) {
    max = tmp;
    searchWord = key;
    }

    }
    */


    List<String> arr = null;
    arr = new ArrayList<String>();

    String key = "";

    int index = 0;
    for(String a : validWordList) {
    key = a.toUpperCase();

    System.out.println("원본 : " + a + " 대문자 : "+ key); // debug

    if(!arr.contains(key)) {
    arr.add(key);
    }


    }



    List<String> arr2 = null;
    arr2 = new ArrayList<String>();

    for(int i = 0 ; i < arr.size(); i++ ) {
    int cnt = 0;

    String b = arr.get(i);
    arr2.add(b);

    for (int j = 0 ; j < validWordList.size();j++) {

    String c = validWordList.get(j);

    if(b.equals(c.toUpperCase() ) ) {
    cnt ++;
    }

    }
    arr2.add(Integer.toString(cnt));
    }

    //debug
    for(String ans : arr2) {
    System.out.println(" arr2 value : " + ans ); // debug
    }


    //여기까지 디버그

    int ansCnt =0 ;
    int bestCnt = 0 ;
    for(int k = 1 ; k<arr2.size(); k++) {

    int a = Integer.parseInt(arr2.get(k));

    if (a > bestCnt) {
    bestCnt = a;
    searchWord = arr2.get(k-1);
    }

    k++;
    }


    System.out.println(" bset cnt value : " + bestCnt );



    ///////////////////////////// <-------------- 여기까지 구현 (2)
    return searchWord;
    }
    }


    =========================

    이름 변환

    public List<String> changeNotation(List<String> inputData) {
    List<String> changedList = new ArrayList<>();
    for(String name : inputData){
    String [] splitName=name.split(" ");

    //debug
    for(String abc : splitName) {
    //System.out.println("abc : "+abc);

    }

    String secondName = splitName[1].substring(0, 1).toUpperCase() + splitName[1].substring(1);
    // String thirdName = splitName[2].substring(0, 1).toLowerCase() + splitName[2].substring(1);


    String thirdName = splitName[2].toLowerCase();

    name=splitName[0]+" "+secondName+thirdName;
    changedList.add(name);
    }
    return changedList;
    }


    ======================


    숫자 체크


    ////////////////////////여기부터 구현 (1) ---------------->
    int num = (int)(Math.log10(inputData)+1);
    String input = Integer.toString(inputData);
    for(int i = 0 ; i < num ; i++) {
    checkNum += Character.getNumericValue(input.charAt(i)) * (num -i);
    }
    ///////////////////////////// <-------------- 여기까지 구현 (1)
    if(checkNum % num == 0) {
    checkNum = checkNum / num;
    } else {
    checkNum = checkNum % num;
    }
    return checkNum;
    }


    /**
    * 새로운 수를 생성하는 기능
    *
    * @param inputData int 입력데이터(숫자)
    * @param checkNum int 체크수
    * @return int 새로운 수
    */
    public int getNewNum(int inputData, int checkNum) {
    int newNum = 0;
    ////////////////////////여기부터 구현 (2) ---------------->
    int 자릿수 = (int)(Math.log10(inputData)+1);
    int 몫 = checkNum / 10;
    int 나머지 = checkNum % 10;
    if(몫 > 0) { //두자리 이상
    if(몫 > 나머지) {
    String tmp = ""+몫 + inputData + 나머지;
    newNum = Integer.parseInt(tmp);
    } else {
    String tmp = ""+나머지 + inputData + 몫;
    newNum = Integer.parseInt(tmp);
    }
    } else { // 몫이 0 -> 한자리라는 뜻
    newNum = inputData * 10 + 나머지;
    }



    ==================



    //////////////////////여기부터 구현 (1) ---------------->
    String input = ""+inputData;
    String tmp = "";
    for(int i = 0 ; i < input.length() - 1 ; i++) {
    int n1 = Character.getNumericValue(input.charAt(i));
    if(n1 == 0) n1 = 1;
    int n2 = Character.getNumericValue(input.charAt(i+1));
    if(n2 == 0) n2 = 1;
    int num = 0;
    if(n1 >= n2) {
    num = n1 / n2;
    } else {
    num = n1 % n2;
    }
    tmp+= num;
    }
    operationResult = Integer.parseInt(tmp);
    ///////////////////////////// <-------------- 여기까지 구현 (1)
    return operationResult;
    }

    /**
    * 중복을 제거한 수를 만드는 기능
    *
    * @param operationResult int 연산 결과
    * @return int 중복을 제거한 수
    */
    public int getNumber(int operationResult){
    int number = 0;
    //////////////////////여기부터 구현 (2) ---------------->
    String tmp = ""+operationResult;
    String ret = "";
    for(int i = 0 ; i < tmp.length() ; i++) {
    char n = tmp.charAt(i);
    if(ret.indexOf(n) == -1) {
    ret += Character.getNumericValue(n);
    }
    }
    number = Integer.parseInt(ret);
    ///////////////////////////// <-------------- 여기까지 구현 (2)
    return number;

  3. hi 2019.08.23 12:42

    1.입력으로제공되는7 ~ 9 자리숫자열을뒤에서부터3자리단위로구분하여3자리숫자로만든뒤큰순서대로정렬한다.※ 입력으로제공되는7 ~ 9 자리숫자에는숫자“0”이사용되지않는다.
    ※ 7자리또는8자리숫자인경우개수가모자란숫자뒤에1또는12를연결한다.
    [입력1] 132362289
    [뒤에서부터3자리로구분] 289 362 132
    [큰순서로정렬] 362 289 132

    [입력2] 4217836
    [뒤에서부터3자리로구분] 836 217 412 (2자리가모자라기때문에12를추가함)
    [큰순서로정렬] 836 412 217

    [입력3] 92118451
    [뒤에서부터3자리로구분] 451 118 921(1자리가모자라기때문에1을추가함)
    [큰순서로정렬] 921 451 118

    2.정렬된세수를이용하여세수의각자릿수끼리덧셈연산한결과를이용하여새로운수를만든다.
    ※ 일의자리는일의자리끼리더하고십의자리는십의자리끼리, 백의자리는백의자리끼리더한다.
    ※ 세수의각자릿수의덧셈결과가10이상이면일의자리만선택한다.
    ※ 단,백의자리연산의결과가10이되어0이선택되는경우라면새로운수생성에사용하지않는다.

    [입력1] 362 289 132
    [각자릿수끼리덧셈연산] 3+2+1=6, 6+8+3 =17, 2+9+2=13
    [결과가10이상이면일의자리숫자를선택] 6 7 3
    [새롭게생성된수] 673

    [입력2] 362 689 132
    [각자릿수끼리덧셈연산] 3+6+1=10, 6+8+3 =17, 2+9+2=13
    [결과가10이상이면일의자리숫자를선택] 0 7 3
    [새롭게생성된수] 73 -> 백의자리수연산결과0이선택된경우에는새로운수생성에사용하지않는다.


    ===
    1.입력으로제공되는7 ~ 9 자리의숫자열을이용하여“문항설명1”의세수를만들어서큰순서로정렬하는기능을구현하시오.
    2.세수를이용하여“문항설명2”의새로운수를생성하는기능을구현하시오.
    ===



    public class Calculation {


    /**
    * 세 수를 만들어서 큰 순서로 정렬하는 기능
    *
    * @param inputData String 입력데이터(숫자열)
    * @return List 정렬된 숫자열 목록
    */
    public List<String> sortNumbers(String inputData) {
    List<String> sortedNumbers = null;

    ////////////////////////여기부터 구현 (1) ---------------->

    sortedNumbers = new ArrayList<String>();

    char[] charData = inputData.toCharArray();

    int count = 0;
    int[] intNumbers = new int[3];
    for (int i = (charData.length); i >= 0; i=i-3) {
    if(i >= 3){
    intNumbers[count++] = Integer.parseInt(inputData.substring(i-3, i));
    } else if(i==2){
    intNumbers[count++] = Integer.parseInt(inputData.substring(i-2, i)+"1");
    } else if(i==1){
    intNumbers[count++] = Integer.parseInt(inputData.substring(i-1, i)+"12");
    }
    }

    Arrays.sort(intNumbers);

    for (int i = intNumbers.length-1; i >= 0; i--) {
    sortedNumbers.add(intNumbers[i]+"");
    }

    ///////////////////////////// <-------------- 여기까지 구현 (1)
    return sortedNumbers;
    }

    /**
    * 세 수를 이용하여 새로운 수를 생성하는 기능
    *
    * @param sortedNumbers List 정렬된 숫자열 목록
    * @return int 생성된 숫자
    */
    public int generateNumber(List<String> sortedNumbers) {
    int generatedNumber = 0;
    ////////////////////////여기부터 구현 (2) ---------------->

    int[] num = {0,0,0}; // [0] 1의 자리 [1] 2의 자리 [2] 3의자리
    for (int i = 0; i < sortedNumbers.size(); i++) {
    num[2] += Integer.parseInt(sortedNumbers.get(i).substring(0, 1));
    num[1] += Integer.parseInt(sortedNumbers.get(i).substring(1, 2));
    num[0] += Integer.parseInt(sortedNumbers.get(i).substring(2, 3));
    }

    for (int i = 0; i < num.length; i++) {
    num[i] %= 10;
    generatedNumber += num[i]*Math.pow(10, i);
    }

    ///////////////////////////// <-------------- 여기까지 구현 (2)
    return generatedNumber;
    }

    }



    ====
    ============================================


    1. 2010년부터2016년까지출생아수데이터가입력으로제공된다.
    2.출생아수가가장많은연도를검색한다.
    ※ 출생아수가동일한연도는없다.

    3.직전연도에비해출생아수가가장크게감소한연도를검색한다.
    ※ 직전연도와비교한출생아수의차가같은경우는없다.

    1.입력으로제공되는데이터를이용하여“문항설명1”에서설명한출생아수가가장많은연도를검색하는기능을구현하시오.※ 출생아수가동일한연도는없다.
    2.입력으로제공되는데이터를이용하여“문항설명2”에서설명한직전연도에비해출생아수가가장크게감소한연도를검색하는기능을구현하시오.※ 직전연도와비교한출생아수의차가같은경우는없다.

    ==
    [초기입력데이터]
    2010201120122013201420152016
    출생아수470200471300484600436500435400438400406200
    ------------------------------------------------------------
    [출생아수가가장많은연도]: 2012
    ------------------------------------------------------------
    [출생아수가가장크게감소한연도]: 2013
    ------------------------------------------------------------
    ====

    public class Statistic {

    /**
    * 출생아 수가 가장 많은 연도 검색 기능
    *
    * @param inputData int[] 입력데이터(출생아 수 데이터) ([0]:2010년, [1]:2011년, [2]:2012년, [3]:2013년, [4]:2014년, [5]:2015년, [6]:2016년)
    * @return int 출생아 수가 가장 많은 연도
    */
    public int getMaxYear(int[] inputData) {
    int maxYear = 0;
    //////////////////////// 여기부터 구현 (1) ---------------->

    int max = 0;
    for (int i = 0; i < inputData.length; i++) {
    if(max < inputData[i]) {
    max = inputData[i];
    maxYear = 2010 + i;
    }
    }

    ///////////////////////////// <-------------- 여기까지 구현 (1)
    return maxYear;
    }

    /**
    * 출생아 수가 가장 크게 감소한 연도 검색 기능
    *
    * @param inputData int[] 입력데이터(출생아 수 데이터) ([0]:2010년, [1]:2011년, [2]:2012년, [3]:2013년, [4]:2014년, [5]:2015년, [6]:2016년)
    * @return int 출생아 수가 가장 크게 감소한 연도
    */
    public int getMaxDecreaseYear(int[] inputData) {
    int maxDecreaseYear = 0;
    //////////////////////// 여기부터 구현 (2) ---------------->

    int Decrease = inputData[1] - inputData[0];
    maxDecreaseYear = 2011;

    for (int i = 1; i < inputData.length-1; i++) {
    int temp = inputData[i+1] - inputData[i];
    if(Decrease > temp) {
    Decrease = temp;
    maxDecreaseYear = 2010 + (i+1);
    }
    }

    ///////////////////////////// <-------------- 여기까지 구현 (2)
    return maxDecreaseYear;
    }

    }

  4. hi 2019.08.23 12:47

    1.재활용품과일반쓰레기의정보를담고있는문자열이입력으로제공된다.
    ※ 재활용품종류와일반쓰레기의표현은아래표의영문자를이용한다.
    ※ 각재활용품과일반쓰레기의양은정수이며영문자앞에1자리로표현한다. ( 1부터9까지)

    2.입력으로제공되는문자열을분석하여각재활용품의양을계산한후가장많이수거된재활용품의종류를검색한다.※ 가장많이수거된재활용품의종류가여러개이면순서에상관없이모두검색한다.

    3.입력으로제공되는문자열을이용하여재활용품과일반쓰레기를합한전체에서재활용품의백분율을계산한다.※ 재활용품의백분율계산시소수점이하버림으로처리한다.

    ===
    초기입력데이터]
    [입력문자열]: 3P4B2S4W5G2P4B2S1W4G6P5S2G4B7W2P3G8S1B6P2S
    ------------------------------------------------------------
    [가장많이수거된재활용품]: 플라스틱스티로폼
    ------------------------------------------------------------
    [재활용품의백분율]: 81
    ------------------------------------------------------------
    ====


    public class Garbage {

    /**
    * 가장 많이 수거된 재활용품의 종류 검색 기능
    *
    * @param inputData String 입력데이터(재활용품과 일반쓰레기 정보를 담고 있는 정보)
    * @return List 가장 많이 수거된 재활용품 (P:플라스틱, B:비닐, S:스티로폼, W:종이)
    */
    public List<Character> getNameList(String inputData) {
    List<Character> nameList = null;
    //////////////////////// 여기부터 구현 (1) ---------------->

    nameList = new ArrayList<Character>();

    char[] charData = inputData.toCharArray();
    HashMap<Character, Integer> NameMap = new HashMap<Character, Integer>();

    NameMap.put('P', 0);
    NameMap.put('G', 0);
    NameMap.put('B', 0);
    NameMap.put('S', 0);
    NameMap.put('W', 0);

    for (int i = 0; i < charData.length-1; i=i+2) {
    int tempCount = (int) NameMap.get((Character)charData[i+1]) + Integer.parseInt(charData[i]+"");
    NameMap.put(charData[i+1], tempCount);
    }

    int maxCount = 0;
    for (Character c : NameMap.keySet()) {
    if(!c.equals('G') && maxCount < NameMap.get(c)) {
    maxCount = NameMap.get(c);
    }
    }

    for (Character c : NameMap.keySet()) {
    if(!c.equals('G') && maxCount == NameMap.get(c)) {
    nameList.add(c);
    }
    }

    ///////////////////////////// <-------------- 여기까지 구현 (1)
    return nameList;
    }

    /**
    * 재활용품의 백분율 계산 기능
    *
    * @param inputData String 입력데이터(재활용품과 일반쓰레기 정보를 담고 있는 정보)
    * @return int 재활용품의 백분율
    */
    public int getRatio(String inputData) {
    int ratio = 0;
    //////////////////////// 여기부터 구현 (2) ---------------->
    char[] charData = inputData.toCharArray();
    HashMap<Character, Integer> NameMap = new HashMap<Character, Integer>();

    NameMap.put('P', 0);
    NameMap.put('G', 0);
    NameMap.put('B', 0);
    NameMap.put('S', 0);
    NameMap.put('W', 0);

    for (int i = 0; i < charData.length-1; i=i+2) {
    int tempCount = (int) NameMap.get((Character)charData[i+1]) + Integer.parseInt(charData[i]+"");
    NameMap.put(charData[i+1], tempCount);
    }

    int G = 0;
    int PBSW = 0;
    for (Character c : NameMap.keySet()) {
    if(c.equals('G')) {
    G = NameMap.get(c);
    } else {
    PBSW += NameMap.get(c);
    }
    }

    ratio = (100 * PBSW) / (G + PBSW);

    ///////////////////////////// <-------------- 여기까지 구현 (2)
    return ratio;
    }

    }1.재활용품과일반쓰레기의정보를담고있는문자열이입력으로제공된다.
    ※ 재활용품종류와일반쓰레기의표현은아래표의영문자를이용한다.
    ※ 각재활용품과일반쓰레기의양은정수이며영문자앞에1자리로표현한다. ( 1부터9까지)

    2.입력으로제공되는문자열을분석하여각재활용품의양을계산한후가장많이수거된재활용품의종류를검색한다.※ 가장많이수거된재활용품의종류가여러개이면순서에상관없이모두검색한다.

    3.입력으로제공되는문자열을이용하여재활용품과일반쓰레기를합한전체에서재활용품의백분율을계산한다.※ 재활용품의백분율계산시소수점이하버림으로처리한다.

    ===
    초기입력데이터]
    [입력문자열]: 3P4B2S4W5G2P4B2S1W4G6P5S2G4B7W2P3G8S1B6P2S
    ------------------------------------------------------------
    [가장많이수거된재활용품]: 플라스틱스티로폼
    ------------------------------------------------------------
    [재활용품의백분율]: 81
    ------------------------------------------------------------
    ====


    public class Garbage {

    /**
    * 가장 많이 수거된 재활용품의 종류 검색 기능
    *
    * @param inputData String 입력데이터(재활용품과 일반쓰레기 정보를 담고 있는 정보)
    * @return List 가장 많이 수거된 재활용품 (P:플라스틱, B:비닐, S:스티로폼, W:종이)
    */
    public List<Character> getNameList(String inputData) {
    List<Character> nameList = null;
    //////////////////////// 여기부터 구현 (1) ---------------->

    nameList = new ArrayList<Character>();

    char[] charData = inputData.toCharArray();
    HashMap<Character, Integer> NameMap = new HashMap<Character, Integer>();

    NameMap.put('P', 0);
    NameMap.put('G', 0);
    NameMap.put('B', 0);
    NameMap.put('S', 0);
    NameMap.put('W', 0);

    for (int i = 0; i < charData.length-1; i=i+2) {
    int tempCount = (int) NameMap.get((Character)charData[i+1]) + Integer.parseInt(charData[i]+"");
    NameMap.put(charData[i+1], tempCount);
    }

    int maxCount = 0;
    for (Character c : NameMap.keySet()) {
    if(!c.equals('G') && maxCount < NameMap.get(c)) {
    maxCount = NameMap.get(c);
    }
    }

    for (Character c : NameMap.keySet()) {
    if(!c.equals('G') && maxCount == NameMap.get(c)) {
    nameList.add(c);
    }
    }

    ///////////////////////////// <-------------- 여기까지 구현 (1)
    return nameList;
    }

    /**
    * 재활용품의 백분율 계산 기능
    *
    * @param inputData String 입력데이터(재활용품과 일반쓰레기 정보를 담고 있는 정보)
    * @return int 재활용품의 백분율
    */
    public int getRatio(String inputData) {
    int ratio = 0;
    //////////////////////// 여기부터 구현 (2) ---------------->
    char[] charData = inputData.toCharArray();
    HashMap<Character, Integer> NameMap = new HashMap<Character, Integer>();

    NameMap.put('P', 0);
    NameMap.put('G', 0);
    NameMap.put('B', 0);
    NameMap.put('S', 0);
    NameMap.put('W', 0);

    for (int i = 0; i < charData.length-1; i=i+2) {
    int tempCount = (int) NameMap.get((Character)charData[i+1]) + Integer.parseInt(charData[i]+"");
    NameMap.put(charData[i+1], tempCount);
    }

    int G = 0;
    int PBSW = 0;
    for (Character c : NameMap.keySet()) {
    if(c.equals('G')) {
    G = NameMap.get(c);
    } else {
    PBSW += NameMap.get(c);
    }
    }

    ratio = (100 * PBSW) / (G + PBSW);

    ///////////////////////////// <-------------- 여기까지 구현 (2)
    return ratio;
    }

    }

+ Recent posts