문제

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

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.

import java.util.Scanner;

public 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);
		
		
	} 
	}	
		
	}

메모

진짜 간단한 문제라고 생각했는데 자꾸 컴파일 오류가 떠서 또 검색해봤다...

입력받는 값이 있는지 묻는 메소드인 hasNextInt() 를 써야했던 거였다.

입력값이 들어와 hasNextInt() 가 true라면 반복하는 코드!

문제

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

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

입력의 마지막에는 0 두 개가 들어온다.

출력

각 테스트 케이스마다 A+B를 출력한다.

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args)  {
		
	Scanner sc = new Scanner(System.in);
	

	
	while(true) {
		int a = sc.nextInt();
		int b = sc.nextInt();
	
		if(a==0 & b==0) {
			sc.close();
			break;
		}
		System.out.println(a + b);
	} 
		
		
	}
}

 

 

메모

처음엔 BufferedReader 로 써보고 싶었는데 아직 어떻게 써야할 지를 모르겠고..

do while 문으로 써보려했지만 이것도 실패..

결국 풀이 방법을 몇 개 찾아보고 Scanner랑 while 힌트를 얻고 작성해봤다.

처음 몇번은 제대로 작동을 안했는데 a, b 입력을 while 문 밖에 둬서 그런거였다.

 

문제

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

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

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("Case #" + (i + 1) + ": " + a + " + " + b + " = " + (a + b) + "\n");
		
		}
		bw.close();
		bw.close();
		
		
	}
}

문제

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

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

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("Case #" + (i + 1) + ": " + (a + b) + "\n");
		
		}
		bw.close();
		bw.close();
		
		
	}
}

 

메모

i는 0부터 시작하므로 case #N이 1부터 시작하기 위해 i + 1 을 해줬다.

나머지 코드는 앞 문제 코드와 동일!

<문제>

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.

C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.

Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.

Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.

또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.

 

입력

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

출력

각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

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.close();
		bw.close();

	}
}

 

 

<메모>

bufferedreader 사용법을 잘 몰라서 개념과 풀이 법을 검색해보았다. 아래의 블로그에서 잘 공부할 수 있었다.

https://coding-factory.tistory.com/251

 

[Java] BufferedReader, BufferedWriter를 활용한 빠른 입출력

BufferedReader/BufferedWriter는 Buffer에 있는 IO 클래스입니다. 입력된 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후에 전달되됩니다. 출력도 마찬가지로 버퍼를 거쳐서 간접적으로 출력장치로

coding-factory.tistory.com

 

 

1. readLine()시 리턴값을 String으로 고정되기에 다른 타입으로 입력받을 시에 형변환 필수.

String s = br.readLine();
int i = Integer.parseInt(br.readLine());

2. 예외처리는 대개 throws IOException을 통하여 작업함.

3. 공백단위로  데이터를 가공

StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출

String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음

 1) StringTokenizer에 nextToken()함수를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출

 2) String.split()함수를 활용하여 배열에 공백단위로 끊어서 데이터를 넣고 사용

 

* 개행문자 "\n"를 추가해야 줄을 바꿀 수 있다.

*bw.close()를 하면 bw.flush()가 내부적으로 호출됨

 

 

문제

준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.

영수증에 적힌,

  • 구매한 각 물건의 가격과 개수
  • 구매한 물건들의 총 금액

을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.

입력

첫째 줄에는 영수증에 적힌 총 금액 X가 주어진다.

둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N이 주어진다.

이후 N개의 줄에는 각 물건의 가격 a와 개수 b가 공백을 사이에 두고 주어진다.

출력

구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes를 출력한다. 일치하지 않는다면 No를 출력한다.

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
	
		int x = sc.nextInt();
		int n = sc.nextInt();
		
		int sum = 0;
		
		for (int i = 1; i <= n; i++) {
			
			int a = sc.nextInt();
			int b = sc.nextInt();
			sum += a*b;
		}
		
		 if(sum == x) {
			 System.out.println("Yes");
		 } else {
			 System.out.println("No");
		 }
		
	 }

	}

출력

처음에 자꾸 No가 출력돼서 풀이를 찾아봤는데 내 식도 맞는 거였다.

그래서 다시 자세히 보니까 if문에서 sum이 x과 같을 때를 조건으로 해야하는데

앞 문제랑 헷갈려서 a*b와 같을 때라고 적어놨던 것...

a 입력, b 입력 a * b 구하기 -> 이거를 n번 반복하고 각 a * b 값을 누적으로 더하기 !

문제

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.

출력

1부터 n까지 합을 출력한다.

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
	
		int n = sc.nextInt();
		int sum = 0;
		
		for (int i = 1 ; i <= n ; i++) {
			sum += i;
			if ( i == n) {
			System.out.println(sum);
		 }
		}
	 }

	}

출력

처음에 합계 변수를 까먹어서 .

다시 찾아봐서 공식대로 작성했는데 1 부터 n 까지의 누적 합계들이 출력이 됐다.

그래서 i가 n일때 합계를 출력하도록 if문을 작성했더니 맞았음!

문제

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

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
	
		int t = sc.nextInt();
		
		for (int i = 1 ; i <= t ; i++) {
			int a = sc.nextInt();
			int b = sc.nextInt();
			
			System.out.println(a+b);
		}
		}

	}

메모

처음에 문제가 이해가 안가서 풀이를 찾아봤는데

'두 숫자 입력 , 결과 출력' 이 t만큼 반복되게 하라는 문제였다.

위 출력이 1부터 T범위 까지 반복된다.

+ Recent posts