1.Hello World

Hello World!를 출력하시오.

 

public class Main {
	public static void main(String args[]) {
		System.out.println("Hello World!");
	}
}

 

2. A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

첫째 줄에 A+B를 출력한다.

 

import java.util.*;
public class Main {
	public static void main(String args[]) {
		Scanner input = new Scanner(System.in);
		int A=input.nextInt();
		int B=input.nextInt();
		
		System.out.print(A+B);
		
	}
}

 

3. A-B

두 정수 A와 B를 입력받은 다음, A-B를 출력하는 프로그램을 작성하시오.

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

첫째 줄에 A-B를 출력한다.

 

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int A=input.nextInt();
		int B=input.nextInt();
		
		System.out.print(A-B);
	}
}

 

4.  A×B

두 정수 A와 B를 입력받은 다음, A×B를 출력하는 프로그램을 작성하시오.

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

첫째 줄에 A×B를 출력한다.

 

import java.util.*;

public class Main{
	public static void main(String args[]) {
		Scanner input = new Scanner(System.in);
		
		int A=input.nextInt();
		int B=input.nextInt();
		
		System.out.print(A*B);
	}
}

 

5.A/B

두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다.

 

import java.util.*;

public class Main {
	public static void main(String args[]) {
		Scanner input = new Scanner(System.in);
		
		double A=input.nextDouble();
		double B=input.nextDouble();
		
		System.out.print(A/B);
	}
}

 

6. 사칙연산

두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. 

두 자연수 A와 B가 주어진다. (1 ≤ A, B ≤ 10,000)

첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A*B, 넷째 줄에 A/B, 다섯째 줄에 A%B를 출력한다.

 

import java.util.Scanner;
public class Main {
	public static void main(String args[]) {
		Scanner input = new Scanner(System.in);
		
		int A=input.nextInt();
		int B=input.nextInt();
		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);
	}
}

 

7.??!

준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.

첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.

첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.

 

import java.util.Scanner;
public class Main {
	public static void main(String args[]) {
		Scanner input = new Scanner(System.in);
		String id= input.next();
		
		System.out.println(id+"??!");
	}
}

 

8. 1998년 생인 내가 태국에서는 2541년생?!

ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다.

불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.

서기 연도를 알아보고 싶은 불기 연도 y가 주어진다. (1000 ≤ y ≤ 3000)

불기 연도를 서기 연도로 변환한 결과를 출력한다.

 

import java.util.Scanner;
public class Main {
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		int y=sc.nextInt();
		System.out.println(y-543);
	}
}

 

9.나머지

(A+B)%C는 ((A%C) + (B%C))%C 와 같을까?

(A×B)%C는 ((A%C) × (B%C))%C 와 같을까?

세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램을 작성하시오.

첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)

첫째 줄에 (A+B)%C, 둘째 줄에 ((A%C) + (B%C))%C, 셋째 줄에 (A×B)%C, 넷째 줄에 ((A%C) × (B%C))%C를 출력한다.

 

import java.util.Scanner;
public class Main{
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		int A=sc.nextInt();
		int B=sc.nextInt();
		int C=sc.nextInt();
		System.out.println((A+B)%C);
		System.out.println(((A%C)+(B%C))%C);
		System.out.println((A*B)%C);
		System.out.println(((A%C)*(B%C))%C);
	}
}

 

10. 곱셈

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

 

import java.util.Scanner;
public class Main{
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		int A=sc.nextInt();
		int B=sc.nextInt();
		
		int B1=B%10;
		int B2=(B%100)/10;
		int B3=B/100;
		int sum1=A*B1;
		int sum2=A*B2;
		int sum3=A*B3;
		System.out.println(sum1);
		System.out.println(sum2);
		System.out.println(sum3);
		System.out.println(sum1+sum2*10+sum3*100);
	}
}

 

11.꼬마 정민

꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!

첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 1012)이 공백을 사이에 두고 주어진다.

A+B+C의 값을 출력한다.

 

import java.util.Scanner;
public class Main {
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		Long A=sc.nextLong();
		Long B=sc.nextLong();
		Long C=sc.nextLong();
		
		System.out.println(A+B+C);
		sc.close();
	}
}

반복문 A+B -4를 풀 때 언제 종료를 해줘야 할 지 알 수 없어서 고민하던 중 질문 게시판에 나와 같은 고민을 하는 질문글을 보았다. 

EOF(End of File)이란?

더 이상 읽을 수 있는 데이터가 없음을 나타내는 용어로 알고리즘 문제를 풀 때는 주로 입력값을 얼마나 받을 지 명시하지 않을 경우 사용한다.

 

EOF의 사용법

1.Sanner 클래스: hasNext() 사용

=입력된 토큰이 있으면 true, 그렇지 않을 경우 false 반환

Scanner scan = new Scanner(System.in);
		
while(scan.hasNext()) {
  System.out.println(scan.nextLine());
}

while(scan.hasNext()) {
  sc.next();
}

 

2.BufferedReader 클래스 :내장 함수가 없다. StringTokenizer의 경우 문자열을 입력하는 것이 아닌 입력받은 문자열을 가송하는 역할로 EOF를 철리한다고 보기 어렵다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = "";

while((input = br.readLine()) != null) {
  // 이후 로직 전개.
}

while((input = br.readLine()) != null && !input.isEmpty()) { ... }

백준: 반복문 A+B -4

isEmpty(): 빈 문자열인지 확인=> 안 쓰면 JAVA에서 오류

package practice;
import java.util.*;
import java.io.*;
public class Main {
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		String s;
		
		while((s = br.readLine())!=null) {
			StringTokenizer st= new StringTokenizer(s);
			if(s.isEmpty()) break;
            
			int A = Integer.parseInt(st.nextToken());
			int B = Integer.parseInt(st.nextToken());
			bw.write((A+B)+"\n");		
		}
		bw.flush();
	}
}


 

NoSuchElement

java.util.NoSuchElementException: 존재하지 않는 것을 가져오려고 할 때 발생

 

Scanner

Scanner에서 이 에러가  발생하는 경우: 더 이상 입력받을 수 있는 값이 없을 때

EX1) 두 수를 입력받고, 합을 출력할 때 수가 하나만 입력되는 경우 // 수가 하나 입력되지 않았을 때

java.util.NoSuchElementException오류

 

더 이상 입력이 없다는 것을 판단할 부분 필요

Scanner에서는 hasNext, hasNextInt, hasNextLong,..

import java.util.*;
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            System.out.println(a+b);
        }
    }
}

 

StringTokenizer

StringTokenizer에서 에러가 발생하는 경우는 Scanner와 비슷

import java.util.*;
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        StringTokenizer st = new StringTokenizer(line);
        int sum = 0;
        for (int i=0; i<6; i++) {
            if (st.hasMoreTokens()) {
                sum += Integer.parseInt(st.nextToken());
            }
        }
        System.out.println(sum);
    }
}
import java.util.*;
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        StringTokenizer st = new StringTokenizer(line);
        int sum = 0;
        while (st.hasMoreTokens()) {
            sum += Integer.parseInt(st.nextToken());
        }
        System.out.println(sum);
    }
}

 

StringTokenizer: 컴마로 구분되는 문자열들을 분리 or 특정 문자에 따라 문자열을 나누고 싶을 때

String :문자열을 Tokenizer: 토큰화하다 => 하나의 문자열을 여러 개의 토큰으로 분리

 

IMPORT

import java.util.StringTokenizer;
import java.util.*;

StringTokenizer 생성자

  1. StringTokenizer st = new StringTokenizer(문자열);   //띄어쓰기 기준으로 문자열 분리
  2. StringTokenizer st = new StringTokenizer(문자열, 구분자);   //구분자를 기준으로 문자열 분리
  3. StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);   //구분자를 기준으로 분리된 문자열 토큰에 포함 안시킬지(default: false), 시킬지(true)

StringTokenizer 메서드

return 값 method명 역할
boolean hasMoreTokens() 남아있는 토큰이 있으면 true를 리턴, 더 이상 토큰이 없으면 false 리턴
boolean hasMoreElements() hasMoreTokens와 동일한데 엘레먼트보다 토큰으로 된 메서드를 주로 씀
String nextToken() 객체에서 다음 토큰을 반환
String nextToken(String delim) delim 기준으로 다음 토큰을 반환
Object nextElement() nextTokens 메서드와 동일하지만 문자열이 아닌 객체를 리턴
int countTokens() 총 토큰의 개수를 리턴

 

구분자가 여러개

StringTokenizer st = new StringTokenizer(str, ".,");

//.와 , 두 개의 문자를 구분자로 사용해서 분리

=> 하나 문자가 아닌, 여러개의 문자를 구분자로 토큰을 만들 수 있다.

 

Split 는 빈 문자열을 토큰으로 인식하지만, StringTokenizer는 인식하지 않는다.

StringTokenizer는 결과값이 문자열, Split 는 결과값이 문자열 배열 

=> StringTokenizer를 이용하면, 전체 토큰을 반복문을 이용해서 출력해야 한다.

StringTokenizer st = new StringTokenizer(str, ".", true);
int i=1;
while(st.hasMoreTokens()){
System.out.println(i++)+st.nextToken());
}

 

readLine(): BufferedReader의  mothod, BufferedReader에서 읽어들인 값을 String으로 저장

만약, 숫자형으로 다시 변환하고 싶다면 Integer.parseInt() 사용

 

integer 나 char를 string으로 변환

String str = String.valueOf(num);

String 을 Char로 변환

Char ch1 = str.CharAt(0); //str의 길이가 1인 경우
Char[] ch2 = str.toCharArray(); //str의 길이가 2 이상

2번 줄의 char array를 출력하여 확인하고자 하면 다음과 같이 변환하여 출력
Arrays.toString(a1.toCharArray())

백준 반복문, 빠른 A+B

import java.util.*;
import java.io.*;
public class Main {
	public static void main(String args[]) throws IOException {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	int T = Integer.parseInt(br.readLine());
	
	for(int i=0;i<T;i++) {
		StringTokenizer st = new StringTokenizer(br.readLine());
		int a = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		bw.write((a+b)+"\n");
	}
	bw.flush();
	}
}

+ Recent posts