국비 수업 8일차

김성수·2022년 10월 31일
0
post-thumbnail

1. 클래스 자료형

  • 단일 데이터를 저장하기 위해 필요한 요소 변수, 자료형
  • 동일한 자료형의 여러 데이터를 저장하기 위한 요소 : 배열
  • 서로 다른 자료형의 여러 데이터를 저장하기 위한 요소 : 구조체(C언어) , 클래스 (C++, Java)
  • 서로 다른 자료형의 데이터를 저장할 수 있는 변수를 가지고 있다
  • 클래스에 의해 생성된 데이터를 객체라고 한다

2. 클래스의 구성 요소

package _class;

class Score {	// 객체를 만들기 위한 설계도의 역할을 수행하는 클래스
	int kor, eng, mat;	// 객체의 세부 속성값을 저장할 변수 (멤버 필드)
		
	void show() {		// 객체의 [기능]을 표현하는 함수 (멤버 메서드)
		System.out.println("국어점수 : " + kor);
		System.out.println("영어점수 : " + eng);
		System.out.println("수학점수 : " + mat);
	}
	
}
/*
 *		클래스의 구성 요소
 * 
 * 	- 필드 : 객체의 속성을 표현하기 위한 변수, 메서드에서는 필드에 접근할 수 있다
 *  - 메서드 : 객체의 기능을 표현하기 위한 함수, 메서드 내부에서 별도의 지역변수를 선언할 수도 있다
 *  - 생성자 : 객체를 생성할 때 호출돠는 특수한 함수, 오버로딩이 가능하다. 클래스의 이름과 동일한 함수
 *  - 접근 제한자 : 객체 내부 요소를 보호하기 위한 형식. 외부로부터의 접근가능 여부를 지정한다.
 */

<
public class Ex02 {
	public static void main(String[] args) {
		// 1) 세 과목의 점수를 배열로 처리함
		int[] arr = { 100, 99, 87 };
		System.out.println("국어점수 : " + arr[0]);	// 0은 국어점수이고
		System.out.println("영어점수 : " + arr[1]);	// 1은 영어점수이고
		System.out.println("수학점수 : " + arr[2]);	// 2는 수학점수이다 (라고 기억해야 함)

		// 2) 세 과목의 점수를 클래스에 의한 객체로 처리함
		Score ob = new Score();
		ob.kor = 100;
		ob.eng = 99;
		ob.mat = 87;

		ob.show();
		
	}
}

package _class;

class Coffee {
	// 문자열 형태의 커피 메뉴 이름
	// 정수 형태의 커피 가격
	String menu;
	int price;
	
	// 생성자 : 객체 생성시 호출되는 함수, 클래스의 이름과 똑같고, 반환형 자체가 없다 (void도 쓰지 않는다)
	// 생성자는 작성하지 않으면, JVM이 컴파일 할때 기본 생성자 코드를 작성해준다
	// 개발자가 생성자를 작성하면, JVM은 자동으로 생성자를 만들어주지 않는다.
	// 생성자도 함수이므로, 자바의 함수 오버로딩이 적용된다.
	
	Coffee(String menu, int price) {
		this.menu = menu;
		this.price = price;
	}
	
	Coffee() {
		
	}
	
	void show() {
		System.out.printf("%s 한잔 가격은 %,d원 입니다.\n",menu,price);
		
	}
	
	// void 반환형으로 이름과 가격을 출력하는 show()
	
	
}

public class Ex03 {
	public static void main(String[] args) {
		// Coffee 클래스를 이용하여 3개의 서로 다른 객체를 생성합니다
		Coffee coffee1 = new Coffee("아메리카노", 2000);
		Coffee coffee2 = new Coffee("카페라떼", 2500);
		Coffee coffee3 = new Coffee("토피넛라떼",3500);
		Coffee coffee4 = new Coffee();
		
		// 각 객체마다, 이름과 가격을 일일히 넣어주어야 한다.
/*		
		coffee1.menu = "아메리카노";
		coffee1.price = 2000;
		coffee2.menu = "카페라떼";
		coffee2.price = 2500;
		coffee3.menu = "토피넛라떼";
		coffee3.price = 3500;
*/
		
		// 서로 다른 객체 3개를 Coffee 배열에 저장합니다
		Coffee[] coffee = {coffee1, coffee2, coffee3 , coffee4 };
		
		// 반복문을 이용하여 각 객체의 show() 함수를 호출합니다.
		for(int i = 0; i < coffee.length; i++) {
			coffee[i].show();
		}
		
		
	}
}

3. 카카오 개발자 인턴쉽 문제 (인형뽑기 게임 알고리즘 구현)

package programmers;

import java.util.ArrayList;

// 코딩테스트 연습 -> 2019 카카오 개발자 겨울 인턴십 -> 크레인 인형뽑기 게임

public class Quiz64061 {
	
    static int solution(int[][] board, int[] moves) {
    	
        int answer = 0;
        // moves를 참조하여 인형을 순서대로 뽑아서 출력하기
//        String basket = "";
        ArrayList<Integer> basket = new ArrayList<Integer>();
        
        for(int i = 0; i < moves.length; i++) {		// 슬롯 번호대로 반복한다
        	int doll = 0;							// 뽑은 인형을 저장할 변수
        	int index = moves[i] - 1;				// 인덱스는 슬롯 번호 - 1
        	for(int j = 0; j < board.length; j++) {	// 보드의 길이(줄 수)만큼 반복
        		if(board[j][index] != 0) {		// j번째 줄의 index번째 슬롯에 인형이 있으면
        			doll = board[j][index];		// 인형을 doll에 저장하고
        			board[j][index] = 0;		// 인형을 뽑았으니, 원래 위치에는 0을 대입하고
        			break;						// 인형 하나 찾았으면 반복을 중단
        		}
        	}
        	System.out.print(doll + " ");	// 뽑기한 인형을 화면에 출력
        	
        	if(doll != 0) {					// 뽑은 인형이 있으면 (0이 아니면)
//        		basket += doll;				// 인형을 바구니에 담는다
        		basket.add(doll);
        	}
//        	if(basket.endsWith(doll + "" + doll)) {
//        	if(basket.contains(doll + "" + doll)) {	// 바구니에 방금 뽑은 종류의 인형이 연속으로 2개 있으면
        	int size = basket.size();
        	if(size >= 2 && basket.get(size - 1) == basket.get(size - 2)) {
        		System.out.println("중복된 인형 터트리기");
//        		basket = basket.substring(0, basket.length() - 2);	// 처음부터 -2까지 잘라낸다	
        		basket.remove(size - 1);
        		basket.remove(size - 2);
        		answer += 2;	// 터트린 인형의 개수만큼 answer를 증가시킨다
        	}
        	
        	System.out.println(basket);
        }
        System.out.println();
        return answer;
    }
    
    static int solution2(int[][] board, int[] moves) {
        int answer = 0;
        ArrayList<Integer> basket = new ArrayList<Integer>();
        
        for(int i = 0; i < moves.length; i++) {		// 슬롯 번호대로 반복한다
        	int doll = 0;							// 뽑은 인형을 저장할 변수
        	int index = moves[i] - 1;				// 인덱스는 슬롯 번호 - 1
        	for(int j = 0; j < board.length; j++) {	// 보드의 길이(줄 수)만큼 반복
        		if(board[j][index] != 0) {		// j번째 줄의 index번째 슬롯에 인형이 있으면
        			doll = board[j][index];		// 인형을 doll에 저장하고
        			board[j][index] = 0;		// 인형을 뽑았으니, 원래 위치에는 0을 대입하고
        			break;						// 인형 하나 찾았으면 반복을 중단
        		}
        	}
        	
        	if(doll != 0) basket.add(doll);
        	
        	int size = basket.size();
        	if(size >= 2 && basket.get(size - 1) == basket.get(size - 2)) {
        		basket.remove(size - 1);
        		basket.remove(size - 2);
        		answer += 2;	// 터트린 인형의 개수만큼 answer를 증가시킨다
        	}
        }
        return answer;
    }
    
    public static void main(String[] args) {
    	int[][] board = {
    			{0, 0, 0, 0, 0}, 
    			{0, 0, 1, 0, 3}, 
    			{0, 2, 5, 0, 1}, 
    			{4, 2, 4, 4, 2}, 
    			{3, 5, 1, 3, 1}
    	};
    	int[] moves = {1, 5, 3, 5, 1, 2, 1, 4};
    	int answer = solution2(board, moves);
    	System.out.println(answer == 4);
	}
}
profile
다들 잘하는데 나만 못해?

0개의 댓글