정수 내림차순으로 배치하기

문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

 

제한 사항

n은 1이상 8000000000 이하인 자연수입니다.

 

문제 풀이

Arrays.sort() 사용하면 되겠다~😎

근데 얘는 오름차순으로 배열하는 메서드이니까 for문을 사용해서 다시 배열 해주자.

1. 문자열로 전환하기 String.valueOf() 메서드 사용

2. split() 메서드 사용해서 나눈 값으로 배열 만들기

3. Arrays.sort() 사용해서 오름차순으로 배열하기

4. for문을 사용해서 내림차순으로 배열하기

5. long 타입으로 변환해서 answer에 저장하기

 

import java.util.Arrays;

public class descendingOrder {

        public long solution(long n) {
            long answer = 0;
            String str = String.valueOf(n);         //String 타입 변환
            String[] nums = str.split("");          //String 배열 만들기
            Arrays.sort(nums); //[1,1,2,3,7,8]      //오름차순으로 정렬하기
            long[] num = new long[nums.length];
            for(int i=0; i<nums.length; i++){       //내림차순으로 정렬하기
                num[i]= Long.parseLong(nums[nums.length-1-i]);
            }

            String almostanswer = "";     //거의 다왔어요! String으로 만들었다가
            for(int i=0; i<num.length;i++){
                almostanswer += num[i];
            }
            answer = Long.parseLong(almostanswer); //Long 타입으로 변환하기!
            return answer;
        }


    public static void main(String[] args) {
        descendingOrder method = new descendingOrder();
        System.out.println(method.solution(118372));
    }
}

 

 

자연수 뒤집어 배열로 만들기

문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

 

제한 사항

n은 10,000,000,000이하인 자연수입니다.

 

문제 풀이

1. 문자열로 변환 String.valueOf.

2. split() 메서드 사용해서 나눈 값으로 배열 만들기

2. for문 이용해서 새로운 배열 만들어주기

import java.util.Arrays;

public class backwardNumbers {
        public int[] solution(long n) {

            String s = String.valueOf(n);
            String[] arr = s.split("");

            int[] answer = new int[arr.length];
            for(int i=0; i<arr.length; i++){
                answer[i] =Integer.parseInt(arr[arr.length-1-i]);
            }


            return answer;
        }

    public static void main(String[] args) {
        backwardNumbers method = new backwardNumbers();
        System.out.println(Arrays.toString(method.solution(12345)));

    }
}

answer를 저대로 프로그래머스에 입력하면 알아서 전환을 해줘서 배열이 출력되지만 

IntelliJ에서는 Arrays.toString(answer) 사용해서 출력해야합니다.

 

자릿수 더하기

문제설명

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 

제한사항

N의 범위 : 100,000,000 이하의 자연수

 

 

문제 풀이

1. integer를 string으로 변환

2. string 문자열을 배열로 변환

3. 배열을 integer로 변환해서 더해주기

public class addNumbers {
    public int solution(int n) {
        int answer = 0;
        String num = String.valueOf(n);
        String[] add = num.split("");
        for(int i=0; i<add.length; i++){
            answer += Integer.parseInt(add[i]);
        }
        return answer;
    }

    public static void main(String[] args) {
        addNumbers method = new addNumbers();
        System.out.println(method.solution(123));
    }
}

 

문제설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

 

제한 사항

문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

 

문제 풀이

1. String s를 각 문자로 나눠서 배열에 저장한다.

2. 각 인덱스 값을 매길 변수 int index =0; ->홀수 짝수를 나타내기 위해

3. 공백이 생길 때마다 index 값을 초기화 한다.

4. 홀수이면 toLowerCase() 사용, 짝수이면 toUpperCase() 사용한다.

5. 변환한 글자를 answer에 저장한다.

public class weirdo {

    public String solution(String s) {
        String answer = "";

        String[] word = s.split(""); //s를 한글잘씩 잘라 word 배열에 담습니다.
        int index = 0;         //홀수, 짝수를 나타나기 위한 index 변수입니다.
        int length = word.length; //word 배열의 길이

        for (int i = 0; i < length; i++) {
            if (word[i].equals(" ")){
                word[i] = " ";
                index = 0;      //공백이후 index 값 초기화 ==0이 된다.
            }else {
                if (index % 2 != 0) {
                    word[i] = word[i].toLowerCase();
                    index++;
                } else if (index % 2 == 0) {
                    word[i] = word[i].toUpperCase();
                    index++;
                }
            }
            answer = answer + word[i];
        }
        return answer;
    }




    public static void main(String[] args) {
        weirdo method = new weirdo();
        System.out.println(method.solution("I love a pizza"));
    }
}

 

출력값

I LoVe A PiZzA

 

피자를 사랑합니다🍕🍕😘

문제1.

기원이는 오늘 항해99를 시작했다. 성격이 급한 기원이는 항해 1일 차부터 언제 수료를 하게될 지 궁금하다. 항해 1일 차 날짜를 입력하면 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만들어보자.
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Main {
    public String solution(int month, int day) {
        String answer = "";
        LocalDate date = LocalDate.of(2022, month, day);
        LocalDate newDate = date.plusDays(98);
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("M월 dd일");
        answer = dateTimeFormatter.format(newDate);
        
        return answer;
    }

    public static void main(String[] args) {
        Main method = new Main();
        System.out.println(method.solution(1, 18));
    }

java.time.LocalDate 와 

java.time.format.DateTimeFormatter 를 import하면 쉽게 풀 수 있는 문제였습니다.

 

.plusDay() 메소드를 이용하여 날짜를 더합니다.

 

DateTimeFormatter.ofPattern()을 사용해서 "M월 dd일" 형식으로 출력합니다.

 

 

문제2.

지용이는 항해에서 한 주 동안 공부 기록을 남길 알고리즘을 만들어보기로 결심했다. 항해의 체크인 페이지에는 몇가지 조건이 있는데 이를 만족하는 알고리즘을 만들어보자.
체크인과 체크아웃은 항상 정시에 진행한 것으로 가정한다.
체크아웃을 할 때 익일 시간은 24+a 로 계산한다.
즉 새벽 2시는 24+2 인 26으로 표기한다.
체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주한다.
따라서 새벽 5시가 넘어가 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리한다.
public class Main {
    public int solution(int[] arr1, int[] arr2) {
        int answer = 0;
        for(int i=0; i<arr2.length; i++){
            if( arr2[i]>=29){
                answer += 21-arr1[i];
            }else {
                answer += arr2[i] -arr1[i];
            }
        }

        return answer;
    }

    public static void main(String[] args) {
        Main method = new Main();
        int[] arr1 = {9, 9, 9, 9, 7, 9, 8};
        int[] arr2 = {23, 23, 30, 28, 30, 23, 23};
        System.out.println(method.solution(arr1, arr2));
    }
}

 

문제3.

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 소수의 최대값과 소수가 아닌 수의 최소값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.

예를들어 s가 "2 3 4 5"라면 "4 5"를 리턴하고, "15 3 10 9 7 8"라면 "8 7"을 리턴하면 됩니다.

소수 찾기가 어렵습니다... 매니저님 오시면 여쭤봐야겠음..

여쭤봤습니다...

 

import java.util.concurrent.LinkedTransferQueue;

public class primeNumbers {

    public String solution(String s) {
        String answer = "";
        //1은 소수가 아니다
        //2를 제외한 짝수도 소수가 아니다.
        //제곱근(sqrt) 범위 나누기법이란?
        //소수 여부를 검사할 수에 대해서 그 값의 제곱근을 기준으로 그 곱은 대칭적으로 곱이 일어나므로 
        //제곱근 이하의 작은 값까지만 검사를 하면 나머지는 검사를 할 필요가 없다는 방법으로 검사할 데이터를 제곱근 개 이하로 줄 일 수 있는 방법

        //소수 중 최대값
        //소수가 아닌 수 중 최소값 

        int primeMax = 0;
        int nonPrimeMin = Integer.MAX_VALUE;

        String[] numbers = s.split(" "); //

        for (String number : numbers) {
            int num = Integer.parseInt(number);
            if (numbercheck(num)) {
                if (num > primeMax) {
                    primeMax = num;
                }
            } else {
                if (num < nonPrimeMin) {
                    nonPrimeMin = num;
                }
            }
        }
        return nonPrimeMin + " " + primeMax;
    }

    private boolean numbercheck(int num) {
        //1이하는 소수가 아님
        if (num <= 1)
            return false;
        //2는 소수지만 2로 나누어지는 수는 소수가 아님
        if (num % 2 == 0)
            return num == 2;

        //3부터 소수 검사; 제곱근 이하의 수로 나누어지면 소수
        for (int i = 3; i < Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }


    public static void main(String[] args) {
        primeNumbers method = new primeNumbers();
        String s = "97 75 88 99 95 92 73";
        System.out.println(method.solution(s));
    }
}

 

자바의 정석

오버로딩(overloading)

  • 한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것
  • println 이 대표적
  • 오버로딩이 성립하기 위한 조건
    • 1. 메서드 이름이 같아야 한다.
    • 2. 매개변수 개수 또는 타입이 달라야 한다.
    • 3. 반환 타입은 영향 없다.
  • 매개변수는 다르지만 같은 의미의 기능수행

 

생성자(constructor)

  • 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드
  • 인스턴스 생성시 수행할 작업(iv 초기화)에 사용

생성자

  • iv 초기화 메서드
  • 이름이 클래스 이름과 같아야 한다.
  • 리턴값이 없다(void 안붙임)
  • 모든 클래스는 반드시 생성자를 가져야 한다 (한개이상)

 

기본 생성자(default constructor)

  • 매개 변수가 없는 생성자
  • 생성자가 하나도 없을 때만 컴파일러가 기본 생성자 자동 추가

클래스이름() {} // 기본 생성자

 

 

매개변수가 있는 생성자

 

매개변수가 있는 생산자

 

생성자 this()

  • 생성자에서 다른 생성자 호출할 때 사용
  • 다른 생성자 호출시 첫 줄에서만 사용 가능 

코드의 중복을 제거

 

참조 변수 this

  • this() 생성자랑 전혀 다른거임
  • 인스턴스 자신을 가리키는 참조변수
  • 인스턴스 메서드(생성자 포함)에서 사용가능
  • 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용
  • 같은 클래스 안에서는 생략 가능

 

참조변수 this와 생성자 this()

this

인스턴스 자신을 가리키는 참조변수 인스턴스 주소가 저장되어 있다.

모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다. (선언 안해도 사용가능)

 

this(), this(매개변수) 

생성자

같은 클래스의 다른 생성자를 호출할 때 사용한다.

 

 

변수의 초기화

  • 지역변수(lv)는 수동 초기화 해야함(사용전 꼭!!!)
  • 멤버변수(iv, cv)는 자동 초기화 된다

 

 

멤버변수의 초기화

1. 명시적 초기화(=) 간단 초기화

 

Class Car {

         int door =4;             //기본형(primitive type) 변수의 초기화

         Engine e = new Engine()  //참조형(reference type) 변수의 초기화

2. 초기화 블럭 (복잡한 초기화)

- 인스턴스 초기화 블럭: {}

- 클래스 초기화 블럭: static {}

 

3. 생성자

-Iv 초기화, 복잡한 초기화에 사용

 

 

클래스 변수 초기화 시점: 클래스가 처음 로딩될 때 한번

인스턴스 변수 초기화 시점: 인스턴스가 생성될 때 마다

1. cv -> iv

2. 자동 0 -> 간단 = -> 복잡 static {}

 

 

 

 

 

 

객체 지향 프로그래밍 OOP:Object-Oriented Programming

 

객체란?

  • 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것.
  • 객체는 속성과 동작으로 구성
  • 객체 모델링(Object Modeling): 현실 세계의 객체를 소프트웨어 객체로 설계하는 것

 

객체의 상호작용

  • 객체들 사이의 상호작용 수단은 메소드
  • 객체가 다른 객체의 기능을 이용하는 것 == 메소드 호출
  •  

메소드 호출

  • 리턴값 = 전자계산기객체.메소드(매개값1, 매개값2,...);
  • int result = Calculator.add(10,20);

 

객체 간의 관계

  • 객체는 개별적으로 사용될 수 있으나, 대부분 다른 객체와 관계를 맺고 있음
    • 집합관계: 하나는 부품, 하나는 완성품
    • 사용관계: 객체간의 상호작용; 객체는 다른 객체의 메소드를 호출하여 원하는 결과를 얻음
    • 상속관계: 상위객체를 기반으로 하위 객체를 생성하는 관계

 

객체와 클래스

  • 클래스: 설계도; 객체를 생성하기 위한 필드와 메소드와 정의되어 있음
  • 인스턴스: 클래스로부터 만들어진 객체

 

객체 지향 프로그래밍 개발

1. 클래스 설계

2. 설계된 클래스를 가지고 사용할 객체를 생성

3. 생성된 객체를 이용

 

 

클래스 선언

  • public 접근 제한자: 파일이름과 동일한 이름의 클래스 선언에만 붙일 수 있음
  • 파일 이름과 일치하지 않는 클래스 선언에 public 접근 제한자를 붙이면 컴파일 에러가 발생
  • 소스 파일 하나당 동일한 이름의 클래스 하나를 선언하는 것이 좋음

 

객체 생성과 클래스 변수

  • 클래스로부터 객체를 생성하려면 new 연산자를 사용
  • new 클래스();
  • new는 클래스로부터 객체를 생성시키는 연산자
  • new 연산자 뒤에 생성자가 오고 생성자는 클래서()형태를 가지고 있음
  • new 연산자로 생성된 객체는 Heap 영역에 생성됨
  • 힙영역에 객체 생성 후 객체의 번지를 리턴
  • 대부분의 객체 지향 프로그램은 라이브러리와 실행 클래스가 분리되어 있음

 

 

클래스의 구성 멤버

  • 필드: 객체의 고유 데이터, 부품 객체, 상태 정보를 저장;
    • 생성자와 메소드 전체에서 사용되며 객체가 소멸 되지 않는 한 객체와 함께 존재
  • 생성자: 생성자는 new 연산자로 호출되는 특별한 중괄호 {} 블록; 
    • 객체 생성 시 초기화 담당
    • 클래스 이름으로 되어있고 리턴 타입으 잆음
  • 메소드: 객체의 동작에 해당하는 중괄호{} 블록
    • 메소드를 호출하면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행
    • 필드를 읽고 수정하는 역할 + 다른 객체를 생성해서 다양한 기능을 수행
    • 객체 간의 데이터를 전달하는 수단
    • 외부로부터 매개값을 받아 실행 + 실행 후 결과 값을 외부로 리턴

 

 

자바의 정석 기초편

 

return문

실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.

 

메서드가 작업을 마쳤을 때 return; //반환 타입이 void이면 생략가능

 

 

반환 타입이 void가 아닌 경우, 반드시 return문 필요

 

 

반환값

-타입이 다 일치해야함

 

 

호출 스택(call stack)

- stack(스택) : 밑이 막힌 상자, 위에 차곡차곡 쌓인다.

- 메서드 수행에 필요한 메모리가 제공되는 공간

- 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제

- 아래 있는 메서드가 위의 메서드를 호출

- 맨 위의 메서드 하나만 실행, 나머지는 대기중

 

호출 스택

 

기본형 매개변수

  • 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다. (read only)
  • 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다. (read& write)

 

 

static 메서드 인스턴스 메서드

  • 인스턴스 메서드
    • 인스턴스 생성 후, 참보변수, 메서드이름()으로 호출
    • 인스턴스 멤버 (iv, im) 관련된 작업을 하는 메서드
    • 메서드 내에서 인스턴스 변수 사용 가능
  • static 메서드(클래스메서드)
    • 객체 생성 없이 클래스 이름.메서드() 으로 호출
    • 인스턴스 멤버와 관련없는 작업을 하는 메서드
    • 메서드 내에서 인스턴스 변수(iv) 사용 불가

iv를 사용하지 않으면 static 메서드

static 메서드는 인스턴스 메서드를 호출할 수 없다.

 

static 메서드는 인스턴스 변수를 사용할 수 없다.

 

왜 쓸수 없나

-> static 메서드 호출시 객체(iv묶음)가 없을 수도 있어서.

자바는 객체지향언어

객체지향 언어

  • 80년 초 소프트웨어의 위기 - 빠른 변화를 못쫓아감
  • 해결책으로 객체지향 언어를 도입(절차적 -> 객체지향)
  • 1996년 Java가 나옴
  • 코드의 재사용성이 높고 유지보수가 용이, 중복 코드 제거
  • 객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙) // 외우세요

OOP(Object-oriented prgramming) 객체지향언어의 4가지 핵심

1. 캡슐화

2. 상속

3. 추상화

4. 다형성

 

 

클래스와 객체

  • 클래스의 정의: 객체를 정의해 놓은 것 ->제품 설계도
  • 클래스의 용도: 객체를 생성하는데 사용
  • 객체의 정의 : 실제로 존재하는 것, 사물 또는 개념 ->제품
  • 객체의 용도: 객체가 가지고 있는 기능과 속성에 따라 다름

 

객체의 구성요소 - 속성과 기능

  • 객체 = 속성(변수) + 기능(메서드)

 

객체와 인스턴스

  • 객체: 모든 인스턴스를 대표하는 일반적 용어
  • 인스턴스: 특정 클래스로부터 생성된 객체

클래스 ---인스턴스화--> 인스턴스(객체)

 

객체와 인스턴스

 

클래스가 필요한 이유? 

-> 객체를 생성하기 위해

 

객체가 필요한 이유?

-> 객체를 사용하기 위해

 

객체를 사용한다는 것은?

-> 객체가 가진 속성과 기능을 사용하려고

 

 

하나의 소스파일에 여러 클래스 작성

  • public class 가 있는 경우, 소스파일의 이름은 반드시 public class의 이름과 일치해야한다.
  • public class가 하나도 없는 경우, 소스파일의 이름은  상관 없음

하나의 소스파일에 여러 클래스 작성

객체의 생성과 사용

1. 객체의 생성

 

클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수를 선언 --> 리모콘 역할

변수명 = new 클래스명();  //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장

Tv t;   //Tv 클래스 타입의 참조변수 t를 선언

t = new tv(); //Tv 인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장

 

2. 객체의 사용

 

t.channel = 7;  // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.

t.channelDown();  // Tv인스턴스 메서드 channelDown()을 호출한다.

System.out.println("현재 채널은 " + t.channel + " 입니다.");

 

객체의 생성과 사용 - 예제

  • 참조변수가 없으면 객체는 사용 불가 -> Garbage Collector 가 제거해간다.
  • 하나의 인스턴스를 여러 개의 참조변수가 가르키는 경우 (가능)
  • 여러 인스턴스를 하나의 참조변수가 가르키는 경우 (불가능)

 

class Ex6_1 {
    public static void main(String args[]) {
        Tv t;                 // Tv인스턴스를 참조하기 위한 변수 t를 선언
        t = new Tv();         // Tv인스턴스를 생성한다.
        t.channel = 7;        // Tv인스턴스의 멤버 변수 channel의 값을 7로 한다.
        t.channelDown();      // Tv인스턴스 메서드 channelDown()을 호출한다.
        System.out.println("현재 채널은 " + t.channel + " 입니다..");
    }
}

class Tv {
    // Tv의 속성(멤버변수)
    String color;           // 생상
    boolean power;             // 전원상태(on/off)
    int channel;               // 채널

    // Tv의 기능(메서드)
    void power()   { power = !power; }  // TV를 켜거나 끄는 기능을 하는 메서드
    void channelUp()   {  ++channel; }  // TV의 채널을 높이는 기능을 하는 메서드
    void channelDown() { --channel; }   // TV의 채널을 낮추는 기능을 하는 메서드
}

 

class Ex6_2 {
    public static void main(String args[]) {
        Tv t1 = new Tv();  // Tv t1; t1 = new Tv();를 한 문장으로 가능
        Tv t2 = new Tv();
        System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
        System.out.println("t2의 channel값은 " + t2.channel + "입니다.");

        t1.channel = 7;    // channel 값을 7으로 한다.
        System.out.println("t1의 channel값은 7로 변경하였습니다.");
        System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
        System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
    }
}

객체마다 별도의 저장공간을 가진다.

 

객체 배열

객체 배열 == 참조변수 배열

 

 

클래스의 정의

클래스 == 데이터 + 함수

 

1. 변수: 하나의 데이터를 저장할 수 있는 공간

2. 배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간

3. 구조체: 서로 관련된 여러 데이터(종류 관계x)를 하나로 저장할 수 있는 공간

4. 클래스: 데이터와 함수의 결합(구조체 +함수)

 

사용자 정의 타입 - 원하는 타입을 직접 만들 수 있다.

 

 

선언 위치에 따른 변수의 종류

 

 

cv는 아무때나 사용가능

iv는 객체생성을 해야 사용 가능

lv는 변수 선언문이 수행되었을 때 사용 

 

 

클래스 변수와 인스턴스 변수

공통 속성은 static 붙인다.

 

클래스 이름을 cv에 붙인다.

 

class Ex6_3 {
    public static void main(String args[]) {
        System.out.println("Card.width = " + Card.width);
        System.out.println("Card.height = " + Card.height);

        Card c1 = new Card();
        c1.kind = "Heart";
        c1.number = 7;

        Card c2 = new Card();
        c2.kind = "Spade";
        c2.number = 4;

        System.out.println("c1은 " + c1.kind + ", " + c1.number + "이며, 크기는 (" + c1.width + ", " + c1.height + ")");
        System.out.println("c2은 " + c2.kind + ", " + c2.number + "이며, 크기는 (" + c2.width + ", " + c2.height + ")");
        System.out.println("c1은 width와 height를 각각 50, 80으로 변경합니다.");
        c1.width = 50;
        c1.height = 80;

        System.out.println("c1은 " + c1.kind + ", " + c1.number + "이며, 크기는 (" + c1.width + ", " + c1.height + ")");
        System.out.println("c2은 " + c2.kind + ", " + c2.number + "이며, 크기는 (" + c2.width + ", " + c2.height + ")");
    }
}

class Card {
    String kind;
    int number;
    static int width = 100;
    static int height = 250;
}

 

메서드란?

1. 문장들을 묶어놓은 것

   - 작업 단위로 문장들을 묶어서 이름 붙인 것

 

2. 값(입력)을 받아서 처리하고 결과을 반환(출력)

 

매서드의 장점

- 코드의 중복을 줄일 수 있다.

- 코드의 관리가 쉽다.

- 재사용 가능

- 반복적으로 수행되는 여러문장을 메서드로 작성

 

메서드 = 선언부 + 구현부

 

반환타입 메서드이름 (타입변수명, 타입변수명, ...)

{

//메서드 호출시 수행될 코드

}

 

메서드

반환타입이 없을 땐 void라고 적는다.

 

메서드의 구현부

지역변수(lv): 메서드 내에 선언된 변수

 

 

메서드의 호출

메서드이름(값1, 값2, ...); // 메서드를 호출하는 방법

 

print99danAll(); // void print99danAll() 호출

int result = add(3,5); // int add(intx, int y)를 호출하고 결과를 result에 저장

 

class Ex6_4 {
    public static void main(String args[]) {
        MyMath mm = new MyMath();
        long result1 = mm.add(5L, 3L);
        long result2 = mm.subtract(5L, 3L);
        long result3 = mm.multiply(5L, 3L);
        double result4 = mm.divide(5L, 3L);

        System.out.println("add(5L, 3L) = " + result1);
        System.out.println("subtract(5L, 3L) = " + result2);
        System.out.println("multiply(5L, 3L) = " + result3);
        System.out.println("divide(5L, 3L) = " + result4);
    }
}

class MyMath {
    long add(long a, long b) {
        long result = a + b;
        return result;
        // return a + b;  //위의 두 줄을 이와 같이 한 줄로 간단히 할 수 있다.
    }
    long subtract(long a, long b) { return a - b; }
    long multiply(long a, long b) { return a * b; }
    double divide(double a, double b) {
        return a / b;
    }
}

 

 

 

 

메서드의 실행흐름

 

완주하지 못한 선수

문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

 

제한 사항

마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.

 

문제 풀이

1. participant에는 있지만 completion에는 없는 값을 찾으면 된다.

2. 동명이인은 어떻게 처리하지? 

3. 오름차순으로 정렬한 후 이름이 같은지 확인하고 아니라면 answer +=;

import java.util.Arrays;

public class unfinished {
    public static void main(String[] args) {
        String [] participant ={"marina", "josipa", "nikola", "vinko", "filipa"};
        String [] completion = {"josipa", "filipa", "marina", "nikola"};
        String answer ="";

        Arrays.sort(participant);
        System.out.println(Arrays.toString(participant));
        Arrays.sort(completion);
        System.out.println(Arrays.toString(completion));

        for(int i =0; i< completion.length;i++){
            if(!(participant[i].equals(completion[i]))){
                answer = participant[i];
                break;
            }else{
                answer = participant[i+1];
            }

        }
        System.out.println(answer);
    }
}

 

 

+ Recent posts