Java/[문제]

[국비][문제] 주민등록번호 유효성 판단, 지역별 날씨 분류

줌인. 2024. 6. 4. 23:33

[문제1]

- 스캐너에서 주민등록값을 입력받음

- 한글자씩 유효성 검증 

-  9   5   1    2   2   6   -  1    2    3    4    5    6    7
  *2  *3  *4  *5  *6  *7     *8  *9  *2   *3   *4  *5   (마지막은 검증)
- 총합을 11로 나눈 나머지를 구함
- 11에서 나머지를 빼고, 뺀 결과값이 검증용 숫자랑 같은지 비교
- 만약 뺀 나머지가 2자리 이상이면 결과값을 10으로 나눠라

- 메인코드를 완성하세요

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("주민 번호 입력 : "); //991225-1234567
    String jumin = sc.next();

    //Quiz3.주민등록번호 유효성 검증
    //예시) 9   5  1  2  2  6  -  1  2   3   4   5   6  7
    //   *2  *3  *4 *5 *6  *7   *8 *9  *2 *3 *4 *5 (마지막은 검증)
    //총합을 11로 나눈 나머지를 구한다
    //11에서 나머지를 빼고, 뺀 결과값이 검증용 숫자랑 같은지 비교
    //만약 뺀 나머지가 2자리 이상이면 결과값을 10으로 나눠라

}

 

[코드 완성 예시]

더보기
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("주민 번호 입력 : "); //991225-1234567
    String jumin = sc.next();

    //Quiz3.주민등록번호 유효성 검증
    //예시) 9   5  1  2  2  6  -  1  2   3   4   5   6  7
    //   *2  *3  *4 *5 *6  *7   *8 *9  *2 *3 *4 *5 (마지막은 검증)
    //총합을 11로 나눈 나머지를 구한다
    //11에서 나머지를 빼고, 뺀 결과값이 검증용 숫자랑 같은지 비교
    //만약 뺀 나머지가 2자리 이상이면 결과값을 10으로 나눠라

    int sum = 0;
    jumin = jumin.replace("-", "0");
    for(int i=0; i <jumin.length();i++) { 
        char c = jumin.charAt(i); 
        String c1 = String.valueOf(c);
        int charNum = Integer.parseInt(c1); 
        if(i >=0 && i<= 5) {
            sum += charNum * (i+2);
        } else if(i==6) {
            sum += 0;
        } else if(i>=7 && i<=8) {
            sum += charNum * (i+1);
        } else if(i>=9 && i<=12) {
            sum += charNum * (i-7);
        }
    }

    System.out.println("총 합계는 ? : " + sum);
    int other = 11 - (sum % 11); //11에서 나머지 뺀 값
    System.out.println("나머지 출력 : " + other);
    char e = jumin.charAt(13);
    String e1 = String.valueOf(e);
    int endNum = Integer.parseInt(e1);
    boolean result = true;
    if(other >= 10) {
        result = ((other / 10) == endNum);
    } else {
        result = (other == endNum);
    }

    if(result) {
        System.out.println("유효성 검증 성공");
    } else {
        System.out.println("유효성 검증 실패");
    }
}

 

① 문자열, 숫자, 문자형 각각 변환 및 접근 방법을 그릴 수 있어야 함

     - valueOf, parseInt etc..

 

② charAt을 사용해서 각 코드별 검증을 진행할 수 있어야 함

 

③ 수의 패턴을 확인하고, 도출 할 수 있어야 함

 

[문제2]

- 코드의 통일되지 않는 부분을 확인하고 통일해라

- 공백을 제거해라

- WeatherDTO의 배열에 지역별 내역을 담아라

- 총 4개의 지역을 나눠라

- init() 메서드를 완성하세요

public class WeatherService {
    private StringBuffer sb;

    public WeatherService() {
        this.sb = new StringBuffer();
        this.sb.append("서울 , 29.3 - 맑음 - 60");
        this.sb.append("- 부산 , 33.6 - 흐림 - 90");
        this.sb.append("- 제주 , 26.5 - 눈 - 30");
        this.sb.append("- 광주 , 10.6 - 태풍 - 80");
    }
    //this.sb.append하나를 하나의 WeatherDTO객체로 만들어서 출력하세요

    public void init() {
       
        }
    }


}

 

[코드 완성 예시]

더보기
public class WeatherService {
    private StringBuffer sb;

    public WeatherService() {
        this.sb = new StringBuffer();
        this.sb.append("서울 , 29.3 - 맑음 - 60");
        this.sb.append("- 부산 , 33.6 - 흐림 - 90");
        this.sb.append("- 제주 , 26.5 - 눈 - 30");
        this.sb.append("- 광주 , 10.6 - 태풍 - 80");
    }
    //this.sb.append하나를 하나의 WeatherDTO객체로 만들어서 출력하세요

    public void init() {
        String sb1 = this.sb.toString();
        String sb2 = sb1.replace(",", "-");

        String [] ar = sb2.split("-");
        for(int i = 0; i <ar.length ; i++) {
            ar[i] = ar[i].trim(); //
            //System.out.println(ar[i]);
        }
        WeatherDTO [] wArr = new WeatherDTO[ar.length / 4]; //4개를 기준으로 나눌거니까
        //배열의 공간만 생긴것이지 배열에 할당된 객체가 없음
        for (int i=0; i<wArr.length; i++) {
            WeatherDTO wd = new WeatherDTO();
            wArr[i] = wd;
        }

        for (int i=0 ; i < ar.length / 4; i++) {
            wArr[i].setCity(ar[i*4]);
            wArr[i].setGion(Double.parseDouble(ar[i*4 + 1]));
            wArr[i].setStatus(ar[i*4 + 2]);
            wArr[i].setHumidity(Integer.parseInt(ar[i*4 + 3]));
        }

    }
}

 

ⓛ 공백제거 및 ","를 "-"로 변경 접근

 

배열 생성과 동시에 객체를 배열에 할당하는 로직을 그릴 수 있어야 함

 

③ 그림을 그려서 패턴을 빠르게 파악할 수 있어야 함

728x90