반응형

# 알고리즘 문제연습5

## 상수 변수 선언 (final)

  • 상수 3.141592 저장하는 변수 PI 선언
final double PI = 3.141592;

## 문자열 비교 (equals)

  • 문자열 비교 시 '=='가 아닌 'equals'를 사용한다.
String str1 = "abc";
String str2 = "abc";

if ( str1 == str2 ) {
}
if ( str1.equals(str2) ) {
	System.out.println("str1과 str2는 같은 값을 가지고 있습니다.");
}

## 문자열 붙이기 / 자르기 (concat / substring)

  • concat : 문자열 붙이기
  • substring : 문자열 자르기
String str1 = "안녕하세요. ";
String str2 = "벌써 여기까지 오셨네요. 끝까지 화이팅!!";

String concatResult;
String substringResult;

concatResult = str1.concat(str2); 
// = > 출력 : 안녕하세요. 벌써 여기까지 오셨네요. 끝까지 화이팅!!

substringResult = str1.substring(2);
// = > 출력 : 하세요.

 

## 생성자

// 매개변수가 없는 경우 name은 "이름없음", number는 0으로 초기화.
// 실행을 위한 코드입니다.
public class CarExam {
    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car("자동차");
        Car car3 = new Car("자동차", 1234);
    }
}

public class Car {
	String name;
    int number;
    
    Car(String name, int number) {
    	this.name = name;
        this.number = number;
    }
    
    Car(String name) {
    	this.name = name;
        this.number = 0;
    }
    
    Car() {
    	this("이름없음", 0);
    }

}

 

## 상속 (extends) 

// Machine 클래스를 상속받는 Car 클래스 
class Machine {
    public void turnOn() {
        System.out.println("켰습니다.");    
    }
    
    public void turnOff() {
        System.out.println("껐습니다.");    
    }
}

class Car extends Machine {

}
//아래는 실행을 위한 코드입니다. 수정하지 마세요.
public class CarExam {
    public static void main(String[] args) {
        Car car = new Car();
        if(Machine.class.isInstance(car)){
            System.out.println("정답입니다. [제출]을 누르세요.");
        }
        else{
            System.out.println("Car가 Machine을 상속받지 않았습니다.");
        }
    }
}

public abstract class Machine {
    public abstract void turnOn();
    public abstract void turnOff();
}

class Car extends Machine {
    // Machine 클래스를 상속받고, 추상 메소드를 구현하세요.
    public void turnOn() {
        
    }
    public void turnOff() {
        
    }
}

## 접근제한자 (private)

  • 클래스 내 필드가 private로 선언된 경우 해당 클래스에서만 사용 가능하다.
  • 접근제한자를 public으로 할 경우 외부에서도 사용 가능.
  • 접근제한자 : 필드 및 매소드에도 사용 가능하다.
필드에 접근제한자 예시

public class CarExam {
    public static void main(String[] args) {
        Car car = new Car("포니", 1234);
        
        System.out.println("name: " + car.name);
        System.out.println("number: " + car.number);
        
    }
}

// 기존 private 
public class Car {
    private String name;
    private int number;
    
    public Car(String name, int number) {
        this.name = name;
        this.number = number;
    }
}

// 변경 public
public class Car {
    public String name;
    public int number;
    
    public Car(String name, int number) {
        this.name = name;
        this.number = number;
    }
}
매소드에 접근제한자 예시

public class CarExam{
    public static void main(String[]args){
        Car car = new Car();
        car.run();
        car.stop();
    }
}

// 기존 매소드 private
public class Car{
    public void run(){
        System.out.println("차가 달립니다.");
    }
    
    private void stop(){
        System.out.println("차가 멈춥니다.");
    }
}

// 변경 public 
public class Car{
    public void run(){
        System.out.println("차가 달립니다.");
    }
    
    public void stop(){
        System.out.println("차가 멈춥니다.");
    }
}

 

## 추상클래스 (abstract)

추상 클래스를 상속받은 클래스는 추상 클래스가 가진 추상 메소드를 반드시 구현해야 합니다. 그렇지 않으면 해당 클래스도 추상 클래스가 됩니다. 

//아래는 실행을 위한 코드입니다. 수정하지 마세요.
public class CarExam {
    public static void main(String[] args) {
        Car car = new Car();
        if(Machine.class.isInstance(car)){
            System.out.println("정답입니다. [제출]을 누르세요.");
        }
        else{
            System.out.println("Car가 Machine을 상속받지 않았습니다.");
        }
    }
}


public abstract class Machine {
    public abstract void turnOn();
    public abstract void turnOff();
}


class Car extends Machine {
    // Machine 클래스를 상속받고, 추상 메소드를 구현하세요.
    public void turnOn() {
        
    }
    public void turnOff() {
        
    }
}

 

## 부모 클래스의 생성자 호출 (super)

  • super()를 이용하면 부모 클래스의 생성자를 호출할 수 있다.
// Bus 클래스는 Car 클래스의 자식 클래스
// Bus 클래스의 생성자는 name(이름), number(차량번호), fee(요금)을 입력받는데,
// 부모 클래스의 생성자를 이용해 name과 number를 초기화 후
// fee를 직접 초기화하는 Bus의 생성자 만들기.
//아래는 실행을 위한 코드입니다. 수정하지 마세요.
public class BusExam {
    public static void main(String[] args) {
        Bus bus = new Bus(new String("뛰뛰"), 3000, 1050);
        if(!bus.name.equals("뛰뛰")){
            System.out.println("bus의 name이 다릅니다.");
        }
        else if(bus.number != 3000){
            System.out.println("bus의 number가 다릅니다.");
        }
        else if(bus.fee != 1050){
            System.out.println("bus의 fee가 다릅니다.");
        }
        else{
            System.out.println("정답입니다. [제출]을 누르세요.");
        }
        
    }
}


public class Car {
    String name;
    int number;
    public Car(String name, int number) {
        this.name = name;
        this.number = number;
    }
}


public class Bus extends Car {
    int fee;
    
    public Bus(String name, int number, int fee) {
        // super를 이용해서 Car클래스의 생성자를 이용하세요.
        super(name,number);
        this.fee = fee;
    }
}

 

## 오버라이딩

  • 오버라이딩은 부모 클래스의 메소드를 수정하고 싶을 때 유용하게 쓰인다.
//다음은 실행을 위한 코드입니다. 수정하지 마세요.
class BusExam {
    public static void main(String [] args) {
        Bus bus = new Bus();
        bus.run();
    }  
}


public class Car {
    public void run() {
        System.out.println("차가 달립니다.");
    }
    
    public void stop() {
        System.out.println("차가 멈춥니다.");
    }
    
    public void horn() {
        System.out.println("경적을 울립니다.");
    }
}


public class Bus extends Car {
    // run 메소드를 오버라이드 하세요. 메소드의 접근 제한자는 public이어야 합니다.
    public void run() {
        System.out.println("차가 달리면서 다음 정거장을 안내합니다.");
    }
}

 

## 예외처리 (try ~ catch)

  • 프로그램 실행 중 예기치 못한 사건을 예외라고 하며, 예외 상황을 미리 예측하고 처리하는 것을 예외처리라고 한다.
public class ExceptionExam{
    public static void main(String []args){
        int [] array = new int[10];
        
        try {
            array[20] = 5;      
        } catch(Exception e) {
            
        }
        
    }
}

 

## 약수의 합

  • 자연수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수
class Solution {
  public int solution(int n) {
      int answer = 0;
      
      for ( int i = 1; i <= n; i++ ) {
          if ( n % i == 0 ) {
              answer += i;
          }
      }
    
      return answer;
  }
}
반응형
반응형

# 알고리즘 문제연습4

## 16진수 구구단 출력 (%x)

  • 16진수 구구단 출력
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt(16);
        
        for ( int i = 1; i <= 15; i++ ) {
        	System.out.format("%X+%X=%X\n", num, i, num*i);
        }
        
    }
}

 

## 빛 섞어 색 만들기 (BufferedWriter, OutputStreamWriter, IOException)

  • 빛 섞어 색 만들기
import java.util.Scanner;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class Main {
	public static void main(String[] args) throws IOException {
    	Scanner scanner = new Scanner(System.in);
        
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        
        BufferedWriter bf = new BufferedWriter(new OutputStreamWriter(System.out));
        
        for ( int i = 0; i < a; i++ ) {
        	for ( int k = 0; k < b; k++ ) {
            	for ( int l = 0; l < c; l++ ) {
                	String st = i + " " + k + " " + l;
                    bf.write(st + "\n");
                }
            }
        }
        
        bf.write(Integer.toString(a*b*c));
        bf.close();
        
    }
}
반응형

'기타' 카테고리의 다른 글

(면접 예상) 99단, 최대공약수, MVC패턴, request/response  (0) 2020.10.03
알고리즘 문제연습5  (0) 2020.10.02
알고리즘 문제연습3  (0) 2020.10.01
알고리즘 문제연습2  (0) 2020.09.30
알고리즘 문제연습1  (0) 2020.09.29
반응형

# 알고리즘 문제연습3

# 비트단위 연산자

  • ~ (bitwise not) : 값 반전
  • & (bitwise and) : AND, 두 개의 값을 비교 시 두 값이 모두 참이면 참(1), 하나라도 다르면 거짓(0)
  • | (bitwise or) : OR, 두 개의 값을 비교 시 하나라도 참이면 참(1), 둘다 거짓이면 거짓(0)
  • ^ (bitwise xor) : XOR, 두개의 값을 비교 시 두 값이 다르면 참(1), 같으면 거짓(0)
  • << (bitwise left shift)
  • >> (bitwise right shift)

 

## 입력된 정수 비트단위로 NOT하여 출력 ( ~ )

  • 입력된 정수를 비트단위로 NOT 하여 출력하기
  • 비트연산의 NOT(반전)은 '~'을 사용.
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        int temp = ~num;
        
        System.out.println(temp);
    }
}

## 입력된 정수 비트단위로 AND하여 출력 ( & )

  • 입력된 두개의 정수를 비트단위로 AND하여 출력하기
  • 비트연산의 '&'을 사용.
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        
        System.out.println(num1 & num2);
    }
}

## 입력된 두개의 정수를 비트단위로 OR하여 출력 ( | )

  • 입력된 두개의 정수를 비트단위로 OR하여 출력하기
  • 비트연산의 '|'을 사용.
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        
        System.out.println(num1 | num2);
    }
}

## 입력된 두개의 정수를 비트단위로 XOR하여 출력 ( ^ )

  • 입력된 두개의 정수를 비트단위로 XOR하여 출력하기
  • 비트연산의 '^'을 사용.
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        
        System.out.println(num1 ^ num2);
    }
}

 

# switch문

  • switch( ) ... case... break; 제어문을 사용할 수 있다.
  • switch( ) 에 주어지는 값은 “정수"값만 가능하며, 문자도 아스키코드 정수값이기 때문에 가능하다.
  • break; 를 사용하지 않으면 이후의 명령들도 계속 실행된다.
  • default 는 제시된 case 를 제외한 나머지 모든 경우에 실행된다.

## 평가 입력받아 다르게 출력하기 ( switch )

  • 평가 입력받아 다르게 출력하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        String str = scanner.next();

        switch(str) {
          case "A":
          	System.out.println("best!!!");
          	break;
          case "B":
            System.out.println("good!!");
            break;
          case "C":
            System.out.println("run!");
            break;
          case "D":
            System.out.println("slowly~");
            break;
          default:
          	System.out.println("what?");
        }

    }
}

 

## 0 입력될때까지 출력하기

  • 0이 입력될때까지 출력하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num;
        
        while (true) {
        	num = scanner.nextInt();
            
            if ( num != 0 ) {
            	System.out.println(num);
            } else {
            	break;
            }
        }
        
    }
}

## 정수 입력받아 계속 출력하기

  • 정수 입력받아 계속 출력하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        int[] arr = new int[num];
    	
        int temp;
        
        for ( int i = 0; i < arr.length; i++ ) {
        	temp = scanner.nextInt();
            arr[i] = temp;
        }
        
        for ( int i = 0; i < arr.length; i++ ) {
        	System.out.println(arr[i]);
        }
    
    }
}

## 정수 1개 입력받아 카운트다운 출력하기1

  • 정수 1개 입력받아 카운트다운 출력하기1
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        for ( int i = num; i >= 1; i-- ) {
        	System.out.println(i);
        }
    }
}

## 정수 1개 입력받아 카운트다운 출력하기2

  • 정수 1개 입력받아 카운트다운 출력하기2
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        for ( int i = num-1; i >= 0; i-- ) {
        	System.out.println(i);
        }
        
    }
}

## 문자 입력받아 알파뱃 출력하기 ( charAt )

  • 문자 입력받아 알파뱃 출력하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        String str = scanner.next();
        
        char temp = str.charAt(0);
        
        for ( char i = 'a'; i <= temp; i++ ) {
        	System.out.println(i);
        }
    }
}

 

## 짝수 합 구하기

  • 입력된 정수까지의 숫자 중 짝수의 합 구하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        int sum = 0;
        
        for ( int i = 1; i <= num; i++ ) {
        	if ( i % 2 == 0 ) {
            	sum += i;
            }
        }
        
        System.out.println(sum);
    }
}

 

## 원하는 문자 입력될때까지 반복 출력하기

  • 원하는 문자 입력될때까지 반복 출력하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        String str;
        char temp;
        
        while ( true ) {
        	str = scanner.next();
            temp = str.charAt(0);
            if ( temp != 'q' ) {
            	System.out.println(temp);
            } else if ( temp == 'q' ) {
            	System.out.println(temp);
                break;
            }
        }
    }
}

 

반응형
반응형

# 알고리즘 문제연습2

## 10진수 > 8진수로 표현 (%o, System.out.format)

  • 10진수 입력받아 8진수로 표현하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        System.out.format("%o", num);
    }
}

 

## 10진수 > 16진수로 표현 (%x, System.out.format)

  • 10진수 입력받아 16진수로 표현하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        System.out.format("%x", num);
    }
}

## 10진수 > 16진수로 표현(대문자로 표현) (%X, System.out.format)

  • 10진수 입력받아 16진수(대문자로 표현)로 표현하기
import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        System.out.format("%X", num);
    }
}

## 8진수 > 10진수로 표현 (Integer.valueOf)

  • 8진수 입력받아 10진수로 표현하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        String temp = scanner.next();
        
        int num = Integer.valueOf(temp, 8);
        
        System.out.println(num);
    }
}

## 16진수 > 8진수로 표현 (toOctalString)

  • 16진수 입력받아 8진수로 표현하기
import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        String temp = scanner.next();
        
        int num = Integer.valueOf(temp, 16);

        String temp2 = Integer.toOctalString(num);

        System.out.println(temp2);

    }
}

## 정수 > 아스키 문자 표현 (형변환)

  • 정수 입력받아 아스키 문자로 출력하기
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        System.out.println((char)num);
    }
}

 

 

## 문자 입력 > 다음 문자 출력 (charAt)

  • 문자 입력받아 다음문자 출력하기
  • scanner에서는 char 입력 불가능, String 으로 입력받아서 변환해줘야 하는데 그때 이용하는게 charAt(0) 이다.
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        String str = scanner.next();
        
        char temp = str.charAt(0);
        
        temp = (char)(temp + 1);
        
        System.out.println(temp);
    }
}

## 비트연산

  • 정수 입력받아 2배 곱해서 출력
  • a << 1 : a를 2배 한 값 출력
  • a >> 1 : a를 반으로 나눈 값 출력
  • a << 2 : a를 4배 한 값 출력
  • a >> 2 : a를 반으로 나눈 후 다시 반으로 나눈 값 출력
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        
        int num = scanner.nextInt();
        
        System.out.println(num << 1);
    }
}

 

반응형

+ Recent posts