메소드

2023. 4. 1. 23:55·Java

문제 : 

양의 정수 내에 있는 홀수 숫자들의 개수를 구하는 문제를 고려한다. 예를 들면, 12345에 있는 홀수 숫자들의 개수는 3이다. 0은 짝수다. 

                     

1. 주어진 양의 정수 내에 있는 홀수 숫자들의 개수를 반복을 사용하여 구하는 메소드를 작성하라.

 

2. 주어진 양의 정수 내에 있는 홀수 숫자들의 개수를 재귀를 사용하여 구하는 메소드를 작성하라.

 

힌트: 양의 정수 내에 있는 홀수 숫자들의 개수를 다음과 같이 구할 수 있다 :

(a)   양의 정수가 10보다 작다면 홀수 숫자들의 개수는 양의 정수를 2로 나눈 나머지가 1이면 1이고 아니면 0이다.

(b)   양의 정수가 10 이상이라면 홀수 숫자들의 개수는 다음과 같다:

1)    마지막 숫자를 2로 나눈 나머지가 1이라면 마지막 숫자를 제거한 나머지 정수 내의 홀수 숫자들의 개수에 1을 더한 값이다.

2)    마지막 숫자를 2로 나눈 나머지가 0이라면 마지막 숫자를 제거한 나머지 정수 내의 홀수 숫자들의 개수이다. 

 

예를 들면, 102030에 있는 홀수 숫자들의 개수는 마지막 숫자인 0을 2로 나눈 나머지가 0이므로 10203에 있는 홀수 숫자들의 개수인 2이다.

 

3.   사용자로부터 하나의 양의 정수를 입력 받아 그 정수 내의 홀수 숫자들의 개수를 1번과 2번에서 작성한 메소드들을 이용하여 구한 후 출력하는 main 메소드를 작성하라. 다음은 모범 출력이다.

 

양의 정수를 입력하세요: 123456789

반복 결과: 5개

재귀 결과: 5개


문제 풀이 : 

import java.util.Scanner;

//Number_of_Even 클래스
public class Number_of_Even {
	//반복문을 사용하여 짝수 숫자들의 개수를 구하는 함수
	public static int even_for(int n) {
		int count = 0;//짝수 숫자들의 개수
		for(int i = 1; i <= n; i++) {
			if((n % 10) % 2 == 0) {
				count++;//n의 맨 뒷자리의 수가 짝수라면 count를 +1 시켜준다
			}
			n /= 10;//n의 맨 뒷자리를 잘라낸다
		}
		return count;//짝수 숫자들의 개수 반환
	}
	
	//재귀를 사용하여 짝수 숫자들의 개수를 구하는 함수
	public static int even_recursive(int n) {
		// 한 자리 숫자인 경우 처리
		if(n < 10) {
			if(n % 2 == 0) {
				return 1;//n이 짝수라면 +1
			}
			else {
				return 0;//n이 홀수면 개수를 증가시키지 않는다
			}
		}
		// 한 자리 숫자가 아닌 경우 처리
		else {
			if((n % 10) % 2 == 0) {
				//n의 맨 뒷자리수가 짝수라면 개수를 1 증가시키고 맨 뒷자리수를 잘라낸다
				return even_recursive(n / 10) + 1;
			}
			else {
				//n의 맨 뒷자리수가 홀수라면 개수를 증가시키지 않고 맨 뒷자리수를 잘라낸다
				return even_recursive(n / 10);
			}
		}
	}
	
	//main 함수
	public static void main(String[] args) {
		//변수 선언
		int num;
		int result;
		
		//스캐너 객체 선언
		Scanner scan = new Scanner(System.in);
		
		//양의 정수를 입력받는다
		System.out.print("양의 정수를 입력하세요: ");
		num = scan.nextInt();
		
		//입력받은 양의 정수를 even_for 함수에 넣고 결과를 result 변수에 집어넣는다
		result = even_for(num);
		//even_for 함수를 통해 얻은 결과를 출력한다
		System.out.println("반복 결과: " + result + "개");
		
		//입력받은 양의 정수를 even_recursive 함수에 넣고 결과를 result 변수에 집어넣는다
		result = even_recursive(num);
		//even_for 함수를 통해 얻은 결과를 출력한다
		System.out.println("재귀 결과: " + result + "개");
		
		//스캐너 객체를 닫아준다
		scan.close();
	}
}

'Java' 카테고리의 다른 글

반복문  (0) 2023.04.01
if 문  (0) 2023.04.01
입&출력  (0) 2023.04.01
'Java' 카테고리의 다른 글
  • 반복문
  • if 문
  • 입&출력
switch_user
switch_user
나의 공부 기록
  • switch_user
    while(true)
    switch_user
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C
      • C++
      • Java
      • Python
      • Web
      • App
      • Security
        • Web Hacking
        • Reverse Engineering
      • DB
      • Machine Learning
      • Computer Science
      • Linux
      • Algorithm
      • 진로
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • velog
    • Github
  • 링크

    • velog
    • Github
  • 공지사항

  • 인기 글

  • 태그

    웹
    SQL
    Web 기초
    SQLi
    디컴파일
    ml
    비트연산
    반복문
    Hacking Process
    x64dbg
    IDA
    모델 기반 학습
    코드 패치
    인터프리팅
    클래스 외부에 함수 구현
    xss
    race condition
    사례 기반 학습
    리버싱
    생성자와 소멸자
    쿠키
    cin.getline
    CSS
    HTML
    HTTP
    배치 학습
    웹해킹
    어셈블리어
    어셈블리
    머신러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
switch_user
메소드
상단으로

티스토리툴바