반응형

1. 문제 번호 11382번


 

2. 문제 풀이 

 

2.1 List(ArrayList)에 배열을 반환 불가

2.2 Try~Catch문 

2.3 Long으로 왜 .. 해야해?? 도대체가 모르겠네


3. 소스 인증

import java.util.*;
import java.lang.*;
import java.io.*;

/**********************

Writer : KTH
Purpose: 

**********************/

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException  {
        Scanner in = new Scanner(System.in);
        String inputValue = in.nextLine();
        List<String> arr = new ArrayList<>();
        long cal = 0;

        //arr.add(inputValue.split(" ")); 배열을 리스트 반환해야 하기 때문에 실패
        String[] values = inputValue.split(" ");
        arr.addAll(Arrays.asList(values));
        
        try {
            for (String a : arr){
                cal += Long.parseLong(a); // 문자열을 정수로 변환하여 합 계산
            }
            System.out.println(cal); // 합 출력
        } catch (NumberFormatException e) {
            System.out.println("Invalid input"); // 변환 오류 처리
        }
    }
}

4. 추가 개념

728x90
반응형
반응형

1. 문제 번호 10926번


 

2. 문제 풀이 

 

2.1 List<String> userIDList = new ArrayList<>();


3. 소스 인증

import java.util.*;
import java.lang.*;
import java.io.*;

/**********************

Writer : KTH
Purpose: 50자 넘지 않기, 대문자도 소문자로 변환, 다중 입력 

**********************/

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException  {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        chkValid(br);
    }

    public static void chkValid(BufferedReader br) throws IOException {
        String [] userID = new String[1];
        StringTokenizer st; //공백을 기준으로 나눌 수 있는 클래스
        
        st = new StringTokenizer(br.readLine());
        userID[0] = st.nextToken().toLowerCase();

        if (userID[0].length()<=50){
            System.out.println(userID[0]+"??!");
        } else {
            chkValid(br);
        }
        
    }
}

 

import java.util.*;
import java.lang.*;
import java.io.*;

/**********************

Writer : KTH
Purpose: 동적배열 + 다중입력 + 소문자 입력

**********************/
// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException  {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        List<String> userIDList = new ArrayList<>();
        chkValid(br, userIDList);
    }

    public static void chkValid(BufferedReader br, List<String> userIDList) throws IOException {
        StringTokenizer st;
        
        st = new StringTokenizer(br.readLine());
        String userID = st.nextToken().toLowerCase();

        if (userID.length()<=50){
            userIDList.add(userID);
        };

        String useYN = br.readLine().trim().toLowerCase();
        if (useYN.equals("y")){
            chkValid(br, userIDList) //추가입력
        } else {
            for (String id : userIDList){
                System.out.println(id+"??!")
            }
        }
    }
}

4. 추가 개념

728x90
반응형
반응형

1. 문제 번호 18108번


 

2. 문제 풀이 

 

2.1 StringTokenizer st = new StringTokenizer() -  인스턴스화할 때 생성자에 대상 문자열을 전달 필수


3. 소스 인증

import java.util.*;
import java.lang.*;
import java.io.*;

/**********************

Writer : KTH
Purpose: 

**********************/

// The main method must be in a class named "Main".
class Main{
    public static void main(String... args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // StringTokenizer st = new StringTokenizer(); 초기화와 동시에 바로 데이터를 입력해줘야함
        
        int year = Integer.parseInt(br.readLine());
        int conversionYear = year-543;
        System.out.print(conversionYear);
        
        
    }
}

4. 추가 개념

 

728x90
반응형
반응형

1. 문제 번호 10869번


 

2. 문제 풀이 

     -> 분모의 입력값이 0 일 경우 에러가 발생하니 사용자 에러로 재입력을 받게 처리(if문을 사용,while문 사용X)

 

2.1 new BufferedReader(new InputStreamReader(System.in)); 실행원리 + 메모리구조

2.2 System.in 

2.3 


3. 소스 인증

import java.util.*;
import java.lang.*;
import java.io.*;


// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        getInput(br);
            
    }

    public static void getInput(BufferedReader br) throws IOException {
        StringTokenizer st;
        int A,B;

        st = new StringTokenizer(br.readLine());
        A = Integer.parseInt(st.nextToken());
        B = Integer.parseInt(st.nextToken());

        if ( B > 0 ) {
            System.out.println(A+B);
            System.out.println(A-B);
            System.out.println(A*B);
            System.out.println(A/B);    
            System.out.println(A%B);    
        } else {
            getInput(br);
        }
    }
}

4. 추가 개념

br.readLine()에 굉장히 많은 개념이 숨어있다.
new BufferedReader(new InputStreamReader(System.in));
메모리 구조


System.in은 바이트 입력 스트림(Byte단위의 스트림(연속적))
->

InputStreamReader 문자 입력 스트림
->
BufferedReader 텍스트 입력 스트림 Read


 

변수는 Stack에 생성, 객체 Heap영역에 생성

 

다음과 같은 순서로 객체가 생성됩니다:

1. InputStreamReader 객체가 생성되고, 힙 영역에 저장됩니다.

2. InputStreamReader 객체를 매개변수로 받아 BufferedReader 객체가 생성되고, 이 또한 힙 영역에 저장됩니다.

3. BufferedReader 객체에 대한 참조가 변수 br에 저장됩니다.

따라서 힙 영역에는 InputStreamReader 객체와 BufferedReader 객체가 동시에 존재하며, 서로 다른 메모리 주소에 저장됩니다.

 

System.in

System.in은 System 클래스의 정적 변수이다.

 

new InputStreamReader(System.in) 부분은 System.in을 사용하여 입력 스트림을 생성하고, 이를 InputStreamReader로 감싸는 것입니다. 

InputStreamReader는 바이트 입력 스트림에서 문자 입력 스트림을 생성하는 역할을 합니다.

 

BufferedReader는 텍스트 입력 스트림을 읽어오는 역할을 담당하는 클래스입니다.

BufferedReader는 문자 입력 스트림에 대한 버퍼링된 입력을 제공하여 효율적인 입출력을 가능하게 합니다.

728x90
반응형
반응형

1. 문제 번호 1008번

2. 문제 풀이 

 

2.1  BufferedReader 

2.2 InputStreamReader

2.3 StringTokenizer

2.4 readLine()

2.5 nextToken()

2.6 parseInt


3. 소스 인증

import java.util.*;
import java.lang.*;
import java.io.*;


// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());
        double A = Integer.parseInt(st.nextToken());
        double B = Integer.parseInt(st.nextToken());

        System.out.print(A/B);
            
    }
}

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) {
        Double [] data = new Double[2];
        Scanner in = new Scanner(System.in);
        boolean isValid = false;
        
        while(!isValid){
            data[0] = in.nextDouble();
            data[1] = in.nextDouble();
            
            if(data[1]>0) {
                isValid = true;
            }
        }
        System.out.print(data[0]/data[1]);
        in.close();
            
    }
}

4. 추가 개념

BufferedReader (≒Scanner)
StringTokenizer(≒split())

BufferedReader

  정의 : 입력받을 때 사용하는 클래스(≒Scanner)

  특징 : - readLine()는 String으로만 Return

           - 공백을 포함하여 문자열 인식      

( Scanner  다양한 type을 받을 수 있는 메서드 존재, 공백을 기준으로 입력값 구분 )

StringTokenizer 

  정의 : 공백을 기준으로 나눌 수 있는 클래스
  특징 : - split()과 동일한 기능

           - nextToken() : readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출

728x90
반응형
반응형

1. 문제 번호 10998번


2. 문제 풀이 

 

2.1 Scanner()

2.2 배열

2.3 hasNextInt()

2.4 nextInt()

 


3. 소스 인증

import java.util.*;
import java.io.*;

public class Main{
    public static void main(String... args){
        int [] arr = new int [2];
        Scanner in = new Scanner(System.in);
        boolean isValid = false;
        
        while(!isValid){
            arr[0] = in.nextInt();
            arr[1] = in.nextInt();
            if(arr[0] > 0 && arr[1] < 10 ) isValid = true;
        }
        System.out.print(arr[0]-arr[1]);
        in.close();
    }    
}

4. 추가 개념

Scanner 주요 메소드

1) String next() : 입력값을 문자열로 리턴 

2) int nextInt() : 입력값을 int 타입으로 리턴
3) double nextDouble() : 입력값을 double 타입으로 리턴 
4) String nextLine() :  ' \n '(띄어쓰기) 을 포함하는 한 라인을 읽고 ' \n '(띄어쓰기) 을 버린 나머지만 리턴 
5) void close() : Scanner 사용 종료 

 

 

배열
/*****배열 선언 방법*****/

/*타입[] 변수;*/

int[] intArray;
double[] doubleArray;
String[] strArray;

/*타입 변수[];*/

int intArray[];
double doubleArray[];
String strArray[];


/*****배열 초기화*****/

/*
방법 1. 타입[] 변수 = new 타입[길이];
*/
String [] AnimalName = new String[2];
AnimalName[0] = "호랑이";
AnimalName[1] = "토끼";


/*
방법 2. 타입[] 변수 = { , , }
*/

String[] names = {"호랑이","토끼"};

/*
방법 3. 타입[] 변수 = null;
             변수 = new 타입[길이];
*/
String[] names = null;
names = new String[] { “혼공자”, “혼공족장”, “자바맨” };

/*
배열 변수는 "참조변수"에 속한다.
    Stack에 변수명, 번지주소

배열은 "객체"이다.
new 한 객체는 heap영역에 해당 길이 만큼의 배열객체를 생성하여 반환한다.
*/

 

방법1. Stack영역의 변수 명과 Heap영역의 객체까지 한꺼번에 생성

방법2. Stack영역의 변수 명만 먼저 생성 후 추후에 객체 생성


 

 

hasNextInt() , NextInt() 차이
nextInt()는 입력된 값이 숫자가 아닐 경우 ERROR가 발생.

hasNextInt()는 입력된 값이 숫자인지 판별.
while문을 사용하여 입력된 값이 숫자가 아닐 경우, nextLine()으로 들어온 값을 날려주고, 숫자를 입력할 때까지 다시 값을 받도록 한다.

 

 

 

728x90
반응형
반응형

1. 문제 번호 1001번


2. 문제 풀이 

 

2.1 Scanner()

2.2 배열

2.3 hasNextInt()

2.4 nextInt()

 


3. 소스 인증

import java.util.*;
import java.io.*;

public class Main{
    public static void main(String... args){
        int [] arr = new int [2];
        Scanner in = new Scanner(System.in);
        boolean isValid = false;
        
        while(!isValid){
            arr[0] = in.nextInt();
            arr[1] = in.nextInt();
            if(arr[0] > 0 && arr[1] < 10 ) isValid = true;
        }
        System.out.print(arr[0]-arr[1]);
        in.close();
    }    
}

4. 추가 개념

Scanner 주요 메소드

1) String next() : 입력값을 문자열로 리턴 

2) int nextInt() : 입력값을 int 타입으로 리턴
3) double nextDouble() : 입력값을 double 타입으로 리턴 
4) String nextLine() :  ' \n '(띄어쓰기) 을 포함하는 한 라인을 읽고 ' \n '(띄어쓰기) 을 버린 나머지만 리턴 
5) void close() : Scanner 사용 종료 

 

 

배열
/*****배열 선언 방법*****/

/*타입[] 변수;*/

int[] intArray;
double[] doubleArray;
String[] strArray;

/*타입 변수[];*/

int intArray[];
double doubleArray[];
String strArray[];


/*****배열 초기화*****/

/*
방법 1. 타입[] 변수 = new 타입[길이];
*/
String [] AnimalName = new String[2];
AnimalName[0] = "호랑이";
AnimalName[1] = "토끼";


/*
방법 2. 타입[] 변수 = { , , }
*/

String[] names = {"호랑이","토끼"};

/*
방법 3. 타입[] 변수 = null;
             변수 = new 타입[길이];
*/
String[] names = null;
names = new String[] { “혼공자”, “혼공족장”, “자바맨” };

/*
배열 변수는 "참조변수"에 속한다.
    Stack에 변수명, 번지주소

배열은 "객체"이다.
new 한 객체는 heap영역에 해당 길이 만큼의 배열객체를 생성하여 반환한다.
*/

 

방법1. Stack영역의 변수 명과 Heap영역의 객체까지 한꺼번에 생성

방법2. Stack영역의 변수 명만 먼저 생성 후 추후에 객체 생성


 

 

hasNextInt() , NextInt() 차이

 

nextInt()는 입력된 값이 숫자가 아닐 경우 ERROR가 발생.

hasNextInt()는 입력된 값이 숫자인지 판별.
while문을 사용하여 입력된 값이 숫자가 아닐 경우, nextLine()으로 들어온 값을 날려주고, 숫자를 입력할 때까지 다시 값을 받도록 한다.
728x90
반응형
반응형

1. 문제 번호 1000번


2. 문제 풀이 

 

2.1 Scanner()

2.2 배열

2.3 hasNextInt()

2.4 nextInt()

 


3. 소스 인증

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        int [] data = new int[2];
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
            data[0] = in.nextInt();
            data[1] = in.nextInt();
        }
        in.close();
        System.out.print(data[0]+data[1]);
    }
}

 

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        int [] data = new int[2];
        Scanner in = new Scanner(System.in);
        boolean validInput = false;
        
        while(!validInput){
            data[0] = in.nextInt();
            data[1] = in.nextInt();

            if (isValid(data[0]) && isValid(data[1])){
                validInput = true;
            }
        }
        System.out.print(data[0]+data[1]);
        in.close();
    }

    public static boolean isValid(int num){
        return num>=1 && num <=10;
    }
}

 

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        int [] data = new int[2];
        Scanner in = new Scanner(System.in);
        boolean validInput = false;
        
        while(!validInput){
            data[0] = in.nextInt();
            data[1] = in.nextInt();

            if (data[0] > 0 && data[1] < 10 ){
                validInput = true;
            }
        }
        System.out.print(data[0]+data[1]);
        in.close();
    }
}

4. 추가 개념

Scanner 주요 메소드

1) String next() : 입력값을 문자열로 리턴 

2) int nextInt() : 입력값을 int 타입으로 리턴
3) double nextDouble() : 입력값을 double 타입으로 리턴 
4) String nextLine() :  ' \n '(띄어쓰기) 을 포함하는 한 라인을 읽고 ' \n '(띄어쓰기) 을 버린 나머지만 리턴 
5) void close() : Scanner 사용 종료 

 

 

배열
/*****배열 선언 방법*****/

/*타입[] 변수;*/

int[] intArray;
double[] doubleArray;
String[] strArray;

/*타입 변수[];*/

int intArray[];
double doubleArray[];
String strArray[];


/*****배열 초기화*****/

/*
방법 1. 타입[] 변수 = new 타입[길이];
*/
String [] AnimalName = new String[2];
AnimalName[0] = "호랑이";
AnimalName[1] = "토끼";


/*
방법 2. 타입[] 변수 = { , , }
*/

String[] names = {"호랑이","토끼"};

/*
방법 3. 타입[] 변수 = null;
             변수 = new 타입[길이];
*/
String[] names = null;
names = new String[] { “혼공자”, “혼공족장”, “자바맨” };

/*
배열 변수는 "참조변수"에 속한다.
    Stack에 변수명, 번지주소

배열은 "객체"이다.
new 한 객체는 heap영역에 해당 길이 만큼의 배열객체를 생성하여 반환한다.
*/

 

방법1. Stack영역의 변수 명과 Heap영역의 객체까지 한꺼번에 생성

방법2. Stack영역의 변수 명만 먼저 생성 후 추후에 객체 생성


 

 

hasNextInt() , NextInt() 차이

 

nextInt()는 입력된 값이 숫자가 아닐 경우 ERROR가 발생.

hasNextInt()는 입력된 값이 숫자인지 판별.
while문을 사용하여 입력된 값이 숫자가 아닐 경우, nextLine()으로 들어온 값을 날려주고, 숫자를 입력할 때까지 다시 값을 받도록 한다.
728x90
반응형

+ Recent posts