728x90
반응형

<오늘의 학습 - 클래스를 만들어 접근해 보자>

1. 원의 반지름 구하기

2. 계산기 만들기

3. 사각형 면적 구하기

4. 필드의 사용

5. 객체의 생성자와 오버로딩 이용

6. 객체 배열

7. 심화 문제 풀이

 

 

1.  원의 반지름을 구하는 클래스 만들기

Circle 코드

public class Circle {
	int radius; // 원의 반지름 필드
	String name; // 원의 이름 필드

	//생성자
	public Circle() {}

	// 원의 면적을 계산하는 메소드
	public double getArea() {
		return 3.14 * radius * radius;
	}
}

 

▶ main 코드

		Circle pizza = new Circle(); // Circle 객체 pizza 생성
		
		pizza.radius = 10; //피자의 반지름을 10으로 설정
		pizza.name = "자바피자"; //피자의 이름
		
		double area = pizza.getArea(); //피자의 면적 리턴
		System.out.println(pizza.name + "의 면적:" + area);
		
		Circle donut = new Circle(); //Circle 객체 donut 생성
		donut.radius = 2; //도넛의 반지름을 2로 설정
		donut.name = "자바도넛"; //도넛의 이름
		
		area = donut.getArea(); //도넛의 면적 리턴
		System.out.println(donut.name + "의 면적:" + area);

 

▶ 출력 결과

자바피자의 면적:314.0
자바도넛의 면적:12.56

 

 

 

2.  계산기 만들기

▶ Calculator 코드

public class Calculator {
	
	//최솟값
	int min(int a, int b){
		return (a>b)?b:a;
	}

	int min(int a, int b, int c){
		int min = (a>b)?b:a;
		return (min>c)?c:min;
		//return (min(a,b)>=c)? c : min(a,b);
	}

	//절댓값
	int abs(int num){
		return (num < 0)? -num : num;
	}
	
	//배열의 평균값
	double avg(int[] arr){
		int sum=0;
		for(int num : arr){
			sum += num;
		}

		return (double)sum/arr.length;
	}
	
	//배열의 최댓값
	int max(int[] arr){
		 for(int num : arr){
		 	max = Math.max(max,num);
		 }
		return max;
	}
	
	
	//값이 바뀌는지 확인
	void test1(int a){
		a=a+1;
	}

	void test2(int[] arr){
		arr[0]=100;
	}
}

 

 

▶ 최솟값 출력

		Calculator clac =  new Calculator();
        
		//최솟값
		int min = clac.min(8, 10);
		System.out.println("8,10 중 최솟값:"+min);

		min = clac.min(8, 5, 6);
		System.out.println("8,5,6 중 최솟값:"+min);
8,10 중 최솟값:8
8,5,6 중 최솟값:5

 

절댓값 출력

		int num = clac.abs(-2);
		System.out.println("-2의 절댓값:"+num);
-2의 절댓값:2

 

 배열 출력

		int arr[]={3,5,2,1,8};
		int max = clac.max(arr);
		System.out.println("배열의 최댓값:"+max);

		double avg=clac.avg(arr);
		System.out.println("배열의 평균값:"+avg);
배열의 최댓값:8
배열의 평균값:3.8

 

 클래스에서 변수와 배열의 값을 변경하고 반환하지 않았을 때의 값 비교

		int a=1;
        
		System.out.println("test1 호출 전 변수 값:"+a);
		clac.test1(a);
		System.out.println("test1 호출 후 변수 값:"+a); //값 안 바뀜
		System.out.println(); //줄 바꿈

		System.out.println("test2 호출 전 배열 값:"+arr[0]);
		clac.test2(arr);
		System.out.println("test2 호출 전 배열 값:"+arr[0]); //값이 100으로 바뀜
test1 호출 전 변수 값:1
test1 호출 후 변수 값:1

test2 호출 전 배열 값:3
test2 호출 전 배열 값:100
  • 변수는 호출만 했을 때는 값이 바뀌지 않는다. 하지만 배열은 호출하여 값을 바꾸면 그대로 값이 바뀐다.

 

 

 

3.  사각형 면적 구하기

 Rectangle 코드

public class Rectangle {
	int width; //너비
	int height; //높이
	
	//접근자. 너비와 높이를 이용해 면적을 리턴
	public int getArea(){
		return width*height;
	}
}

 

▶ main 코드

		Rectangle rectangle = new Rectangle();
		Scanner scan = new Scanner(System.in);
		
		//사각형의 너비와 높이를 직접 입력
		System.out.println("<사각형의 넓이 구하기>");
		System.out.print("너비의 길이를 입력하세요:");
		rectangle.width = scan.nextInt();
		
		System.out.print("높이의 길이를 입력하세요:");
		rectangle.height = scan.nextInt();
		System.out.println(); //줄바꿈
		
		//사각형의 면적을 계산하여 출력
		System.out.printf("사각형의 면적:%d\n", rectangle.getArea());
		
		scan.close();

 

▶ 출력 결과

<사각형의 넓이 구하기>
너비의 길이를 입력하세요:5
높이의 길이를 입력하세요:10

사각형의 면적:50

 

 

 

4.  필드의 사용

▶ main 코드

	int iNum1, iNum2;
	double dNum;

	//합을 구하는 메소드
	double sum(){
		return iNum1+iNum2+dNum;
	}
	
	public static void main(String[] args) {
		Practice threeSum = new Practice();
		Scanner scan = new Scanner(System.in);
		
		//숫자 입력
		System.out.println("<세 개의 숫자의 합 구하기>");
		System.out.print("첫 번째 숫자를 입력하세요(정수):");
		threeSum.iNum1 = scan.nextInt();	

		System.out.print("두 번째 숫자를 입력하세요(정수):");
		threeSum.iNum2 = scan.nextInt();
		
		System.out.print("세 번째 숫자를 입력하세요(실수):");
		threeSum.dNum = scan.nextDouble();
		System.out.println(); //줄바꿈
		
		//합 출력
		System.out.println("입력한 숫자의 합:"+threeSum.sum());		
	}//main_end

 

▶ 출력 결과

<세 개의 숫자의 합 구하기>
첫 번째 숫자를 입력하세요(정수):11
두 번째 숫자를 입력하세요(정수):22
세 번째 숫자를 입력하세요(실수):3.3

입력한 숫자의 합:36.3

 

 

 

 

5.  객체의 생성자와 오버로딩

Circle 코드

public class Circle {
	int radius;
	String name;
	
	Circle(){
		System.out.println("기본 생성자 호출");
	}
	
	Circle(int r, String name){
		System.out.println("매개변수 생성자 호출");
		
		radius=r; //매개변수를 받아와 radius에 값을 넣는다. radius=r보다는 this.radius=radius 으로 작성하는 방법을 추천한다.
		this.name=name;	//this를 사용하면 Circle 안의 radius를 뜻한다.
	}
}

 

▶ main 코드

		Circle c = new Circle();
		
		c = new Circle(5,"Jo");
		System.out.printf("radius:%d\nname:%s",c.radius,c.name);

 

▶ 출력 결과

기본 생성자 호출
매개변수 생성자 호출
radius:5
name:Jo

 

 

 

6.  객체 배열

 Circle 코드

public class Circle {
	int num;

	Circle(int num){
		this.num=num;
	}
}

 

▶ main 코드

		Circle[] cArray = new Circle[5]; //5개의 공간을 가짐
		for(int i=0;i<cArray.length;i++){
			cArray[i]= new Circle(i); //i 값으로 초기화
			System.out.println(cArray[i].radius);
		}

 

▶ 출력 결과

0
1
2
3
4

 

 

 

7. 심화 문제 풀이

 

[JAVA] 심화 문제 풀이

 

deliciouscode.tistory.com

 

 

 

 

 


2023년 5월 30일 화요일

<12일차 수업 후기>

동일한 패키지에 클래스를 생성하고, 객체를 생성하여 접근하는 실습을 했다. 예전에 애플리케이션을 만들 때 여러 개의 클래스를 만들고 접근했던 기억이 나서 재미있는 수업이었다.

728x90
반응형
728x90
반응형

문제

  • 배열 {5,3,10,2,9,8}을 오름차순으로 정렬하시오.
  • 단, 홀수를 먼저 정렬한 뒤에 짝수를 정렬하시오. →   {3, 5, 9, 2, 8, 10} 
  • 홀수, 짝수의 개수는 같다고 가정한다.
  • Arrays.sort() 사용이 가능하다.

 

 

1.  값이 저장된 배열 하나로 정렬

▶ 코드 순서

1) Arrays.sort()를 이용해 정렬 

		//오름차순 정렬
		Arrays.sort(arr);

		System.out.print("오름차순 정렬:");
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
		System.out.println("\n");//줄바꿈

 

2) 홀수 정렬

		//홀수 정렬. 정렬되어 있기 때문에 홀수 값을 oddNumber를 이용해 순서대로 앞으로 옮김
		for(int i=0;i<arr.length;i++){
			if(arr[i]%2!=0){
				temp=arr[i];
				arr[i]=arr[oddNumber];
				arr[oddNumber]=temp;
				oddNumber++;
			}//홀수일 때, 정렬한 값을 앞으로 바꾼다.
		}
  • 이미 배열은 오름차순으로 정렬이 되어있기 때문에 홀수 값을 순서대로 찾아 앞 쪽으로 옮기면 홀수 값이 정렬된다.

 

3) 짝수 정렬 (뒷 배열에 대해 버블 정렬)

		//짝수 정렬. 홀수 정렬을 하면서 짝수의 값은 섞여 있을 수 있기 때문에 버블 정렬 이용
		for(int i=arr.length-1;i>evenNumber;i--){
			for(int j=evenNumber;j<i;j++){
				if(arr[j]>arr[j+1]){	//앞에 있는 값이 크면 값 정렬
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
  • 무작위로 홀수 값과 자리를 변경했기 때문에 짝수 부분은 정렬이 된 상태가 아니다.
  • 짝수 부분의 정렬을 위해 버블 정렬을 이용했다.
  • 홀수와 짝수의 개수가 같다고 가정하여, 배열의 절반 부분을 담은 변수 evenNumber부터 정렬을 한다. (evenNumber는 마지막 OddNumber의 값과 같으나 가독성을 위해 변수를 만들었다.)

 

 

▶ 전체 코드

		System.out.println("문제 3. 오름차순 정렬. 단, 홀수인 값을 먼저 정렬하고 짝수인 값을 나중에 정렬하시오.\n");

		int[] arr= {5,3,10,2,9,8};
		int temp;
		int oddNumber=0;
		int evenNumber=arr.length/2;	//홀수와 짝수의 개수는 같다고 가정

		System.out.print("정렬 전:");
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
		System.out.println("\n");//줄바꿈
		
		
		//오름차순 정렬
		Arrays.sort(arr);

		System.out.print("오름차순 정렬:");
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
		System.out.println("\n");//줄바꿈

		
		//홀수 정렬. 정렬되어 있기 때문에 홀수 값을 oddNumber를 이용해 순서대로 앞으로 옮김
		for(int i=0;i<arr.length;i++){
			if(arr[i]%2!=0){
				temp=arr[i];
				arr[i]=arr[oddNumber];
				arr[oddNumber]=temp;
				oddNumber++;
			}//홀수일 때, 정렬한 값을 앞으로 바꾼다.
		}

		//짝수 정렬. 홀수 정렬을 하면서 짝수의 값은 섞여 있을 수 있기 때문에 버블 정렬 이용
		for(int i=arr.length-1;i>evenNumber;i--){
			for(int j=evenNumber;j<i;j++){
				if(arr[j]>arr[j+1]){	//앞에 있는 값이 크면 값 정렬
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}

		//출력
		System.out.print("홀수->짝수 순으로 정렬:");
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}

 

 

▶ 출력 결과

문제 3. 오름차순 정렬. 단, 홀수인 값을 먼저 정렬하고 짝수인 값을 나중에 정렬하시오.

정렬 전:5 3 10 2 9 8 

오름차순 정렬:2 3 5 8 9 10 

홀수->짝수 순으로 정렬:3 5 9 2 8 10

 

 

 

2.  빈 배열을 이용해 정렬

▶ 코드

		int arr[] = {5, 3, 10, 2, 9, 8};
		int arr2[] = new int[arr.length];
		int index = 0;
		
		//배열 정렬
		Arrays.sort(arr);
		System.out.println("배열 정렬:"+Arrays.toString(arr)); //배열 출력
		
		//홀수 입력
		for(int i=0; i<arr.length; i++){
			if(arr[i]%2 != 0){
				arr2[index++] = arr[i]; // {3,5,9,0,0,0}
			}
		}
		
		//짝수 입력
		for(int i=0; i<arr.length; i++){
			if(arr[i]%2 == 0){
				arr2[index++] = arr[i]; // {3,5,9,2,8,10}
			}
		}
		
		//출력
		System.out.println("홀수->짝수 순으로 정렬:"+Arrays.toString(arr2));

 

 

▶ 출력 결과

배열 정렬:[2, 3, 5, 8, 9, 10]
홀수->짝수 순으로 정렬:[3, 5, 9, 2, 8, 10]

 

 

728x90
반응형

'HRD_훈련 > 실습' 카테고리의 다른 글

[JAVA] 심화 문제 풀이 (13일차)  (0) 2023.05.31
[JAVA] 심화 문제 풀이 (12일차)  (0) 2023.05.31
[JAVA] 선택 정렬 보완  (0) 2023.05.28
[JAVA] 선택 정렬과 버블 정렬  (1) 2023.05.25
[JAVA] UP&DOWN 답 맞추기  (0) 2023.05.25
728x90
반응형

문제

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

x return
10 true
12 true
11 false
13 false

▶ 제한사항

  • x는 1 이상, 10000 이하인 정수입니다.

 

 

Solution 코드

class Solution {
    public boolean solution(int x) {
        int harshadNumber=0;
        int temp=x;
        
        //자릿수 합 구하기
        while(temp!=0){
            harshadNumber+=temp%10;
            temp/=10;
        }
        
        if(x%harshadNumber==0)
            return true;
        else
            return false;
    }
}
  • 자릿수의 합을 구하기 위해서는 x를 10으로 나눈 나머지 값을 harshadNumber 변수에 저장하고, x의 값을 10으로 나눈 값으로 나머지 값을 구하는 것을 반복한다. 만약 18이라면 18을 10으로 나눈 나머지인 8이 저장되고, 10으로 나눈 값인 1으로 연산을 반복한다. 1을 10으로 나눈 나머지인 1을 더하면 자릿수 합은 9이다.
  • x를 자릿수 합을 모두 더한 harshadNumber 값으 나누었을 때의 나머지가 0이라면 harshadNumber는 하샤드 수이다. 18을 9로 나누었을 때의 나머지 값은 0이기 때문에 하샤드 수임을 의미한다. 
728x90
반응형
728x90
반응형

문제

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

n return
121 144
3 -1

 

▶ 제한사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.
  • 121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
  • 3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

 

 

Solution 코드

class Solution {
    public long solution(long n) {
        long answer=0;
        
        for(long i=1;i<=(n/2)+1;i++){
            if(n==(i*i)){
                answer=i+1;
                break;
            }
        }
        if(answer==0)
            return -1L;
        else
            return (answer*answer);
    }
}
  • n은 1이상, 50000000000000 이하인 양의 정수이기 때문에 long형을 이용한다.
  • 제곱근은 n의 절반만 비교하면 되기 때문에 n번 비교할 필요가 없다. 만약 n번 비교하도록 반복문을 설정한다면 n이 50000000000000일 때 50000000000000번 반복하게 되어 많은 시간이 소요된다.
  • 제곱근을 구하는 반복문은 (n/2)+1까지 반복한다. 만약 n이 1일 때 1은 1의 제곱근인데 n/2를 하게 되면 i<0으로 반복문의 조건이 성립하지 않아 제곱근을 구할 수 없기 때문에 +1까지 반복한다.
  • 만약 n값과 i*i의 값이 같다면 i는 n의 제곱근이다. i의 값을 구한다면 i+1의 제곱을 리턴하고 n의 제곱근을 찾지 못한다면 -1을 리턴한다.
728x90
반응형
728x90
반응형

아래 코드를 보완한 코드

 

[JAVA] 문자열을 정수로 바꾸기 보완

보완 전 코드 [JAVA] 문자열을 정수로 바꾸기 문제 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 예를 들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩

deliciouscode.tistory.com

 

 

 

문제

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

예를 들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

 

▶ 제한사항

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 "0"으로 시작하지 않습니다.

 

 

 

Solution 코드

class Solution {
    public int solution(String s) {
        int answer = 0;
        int len = s.length();//단위를 알기 위한 변수
        int i=0;
        
        if(s.charAt(i)=='-' || s.charAt(i)=='+'){
            len--;
            i=1;
        }
        
        for(;i<s.length();i++){
            int c = Character.getNumericValue(s.charAt(i));
            
            int temp=c;
            for(int j=1;j<len;j++)
            	temp*=10;
            
            answer+=temp;
            len--;
        }
        
        if(s.charAt(0)=='-')
            return -answer;  
        else
            return answer;
    }
}
  • 문자열 s의 맨 앞의 문자가 '-'이거나 '+'일 때 맨 첫 번째 숫자는 1 번째부터 시작한다.(i=1) 또한, s가 "-1000"일 때 s.length();의 값은 5이지만 -는 숫자로 포함시키지 않기 때문에 len의 값에 1을 빼 4자리임을 알린다.
  •  모든 문자열을 한 글자씩 문자화 시키고 자릿수만큼 10을 반복하여 곱한 값을 answer 변수에 모두 더해 리턴한다. 만약 "1000" 일 때 첫 번째 글자는 1이 아닌 1000으로 저장되야 한다. 이 때, len을 이용하여 자릿수만큼 10을 반복하여 곱하면 1이 아닌 1000으로 저장할 수 있다.
728x90
반응형

'문제 > JAVA' 카테고리의 다른 글

[JAVA] 하샤드 수  (0) 2023.05.30
[JAVA] 정수 제곱근 판별  (0) 2023.05.30
[JAVA] 문자열 내 p와 y의 개수  (0) 2023.05.29
[JAVA] 자연수 뒤집어 배열로 만들기  (0) 2023.05.29
[JAVA] x만큼 간격이 있는 n개의 숫자  (0) 2023.05.29

+ Recent posts