본문 바로가기

카테고리 없음

[백준 알고리즘]_반복문

 

1) 2739

문제 : N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.

입력 : 첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 9보다 작거나 같다.

출력 : 출력 형식과 같게 N*1부터 N*9까지 출력한다.

예제입력1 : 2

예제출력1 :

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int number = sc.nextInt();
		for(int i = 1; i<=9; i++) {
			System.out.println(number + " * " + i + " = " + number * i);
		}
	}
}

 

 

2) 10950

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

입력 : 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0<A, B<10)

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

예제입력1 :

5

1 1

2 3

3 4

9 8

5 2

예제출력1 :

2

5

7

17

7

 

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

 

 

3) 8393

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

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

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

예제입력1 : 3

예제출력1 : 6

 

import java.util.Scanner;

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

		int number = sc.nextInt();
		int sum = 0;
		
		for(int i=1; i<=number; i++) {
			sum += i;
		}
		System.out.println(sum);
	}
}

 

4) 25304

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

- 구매한 각 물건의 가격과 개수

- 구매한 물건들의 총 금액

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

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

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

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

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

제한 :

 

 

예제입력1 : 

예제출력1 : Yes

 

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int total = sc.nextInt();   // 영수증에 적힌 총 금액
		int count = sc.nextInt();   // 영수증에 적인 물건 갯수
		int sum = 0;
		
		for(int i=0; i<count; i++) {
			int price = sc.nextInt();   // 각 물건의 금액
			int cnt = sc.nextInt();    // 각 물건의 갯수
			sum += price * cnt;
		}
		if (total - sum == 0) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	}
}

 

 

5) 25314

문제 : 오늘은 혜야의 면접날이다. 면접 준비를 열심히 해서 앞선 질문들을 잘 대답한 혜아는 이제 마지막으로 칠판에 직접 코딩하는 문제를 받았다. 혜아가 받은 문제는 두 수를 더하는 문제였다. ... "만약, 입출력이 N바이트 크기의 정수라면 프로그램을 어떻게 구현해야 할까요?" 혜아는 책에 있는 정수 자료형과 관련된 내용을 기억해 냈다. 책에는 long int는 4바이트 정수까지 저장할 수 있는 정수 자료형이고 long long int는 8바이트 정수까지 저장할 수 있는 정수 자료형이라고 적혀있었다. ... 혜아가 N바이트 정수까지 저장할 수 있다고 생각해서 칠판에 쓴 정수 자료형의 이름은 무엇일까?

입력 : 첫 번째 줄에는 문제의 정수 N이 주어진다. (4≤N≤1000; N은 4의 배수)

출력 : 혜아가 N바이트 정수까지 저장할 수 있다고 생각하는 정수 자료형의 이름을 출력하여라.

예제입력1 :  4

예제입력2 : long int

 

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int number = sc.nextInt();
		int result = number / 4;
		
		for(int i=0; i<result; i++) {
			System.out.print("long ");
		}
		System.out.println("int");
	}
}

 

6) 15552

문제 : 본격적으로 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를 한 줄에 하나씩 순서대로 출력한다.

예제입력1 :

 

 

 

 

 

예제출력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));
		
		StringTokenizer st;
		
		int T = Integer.parseInt(br.readLine());	// 문자열이므로 숫자로 형변환
		
		for(int i=0; i<T; i++) {
			st = new StringTokenizer(br.readLine());	// 한줄에 들어온 문자열 나눔
			bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + "\n");
		}
		bw.close();
	}
}

 

 

[공부의흔적]_Buffer

자바에서 입력 받을 때 Scanner 클래스로 입력을 받았다. 하지만 속도 측면에서 BufferedReader를 사용하게 되면 훨씬 줄어들 수 있다. ​- BufferedReader : Scanner와 유사- BufferedWriter : System.out.println()과 유

mh030128.tistory.com

 

 

7) 11021

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

입력 : 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

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

예제입력1 :

5

1 1

2 3

3 4

9 8

5 2

예제출력1 :

Case #1: 2

Case #2 : 5

Case #3 : 7

Case #4 : 17

Case #5 : 7

 

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("Case #" + i + ": " + (a+b));
		}
	}
}

 

BufferedReader 사용

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

public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int a = Integer.parseInt(br.readLine());
		
		StringTokenizer st;
		for(int i=1; i<=a; i++) {
			st = new StringTokenizer(br.readLine()," ");	// 공백 단위로 입력해 준 문자열을 공백단위로 분리
			System.out.println("Case #" + i + ": " + 
			(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())));
		}
		br.close();
	}
}

 

 

8) 11022

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

입력 : 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A,B < 10)

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

예제입력1 :

5

1 1

2 3

3 4

9 8

5 2

예제출력2 :

Case #1: 1 + 1 = 2

Case #2: 2 + 3 = 5

Case #3: 3 + 4 = 7

Case #4 :9 + 8 = 17

Case #5: 5 + 2 = 7

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("Case #" + i + ": " + a + " + " + b + " = " + (a+b));
		}
	}
}

 

 

BufferedReader 사용

public class Multiple {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());
		int a;
		int b;
		
		StringTokenizer st;
		for(int i=1; i<=T; i++) {
			st = new StringTokenizer(br.readLine()," ");	// 공백 단위로 입력해 준 문자열을 공백단위로 분리
			a = Integer.parseInt(st.nextToken());
			b = Integer.parseInt(st.nextToken());
			System.out.println("Case #" + i + ": " + a + " + " + b + " = " + (a+b));
		}
		br.close();
	}
}

 

9) 2438

문제 : 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

입력 : 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력 : 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

예제입력1 : 5

예제출력1 :

*

**

***

****

*****

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

 

다양한 풀이 존재

// StringBuilder 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Try {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		br.close();
		
		StringBuilder sb = new StringBuilder();
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=i; j++) {
				sb.append("*");
			}
			sb.append("\n");
		}
		System.out.println(sb);
	}
}

// BufferedWriter 사용
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Multiple {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		br.close();
		
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=i; j++) {
				bw.write("*");
			}
			bw.newLine();
		}
		bw.flush();
		bw.close();
	}
}
 

[공부의흔적]_StringBuilder

자바에서 문자열 하면 String을 대게 많이 떠올릴 것이다.그런데 이 문자열이 1개 이상 있어서 이것들을 더해야 한다고 하면 어떤 방법을 사용할 수 있을지 알아보자.간단하게는 아래처럼 사용할

mh030128.tistory.com

 

10) 2439

문제 : 첫째 줄에는 별1개, 둘째 줄에는 별 2개, N번재 줄에는 별 N개를 찍는 문제. 하지만, 오른쪽 기준으로 정렬한 별을 출력하시오.

입력 : 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력 :첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

예제입력1 : 5

예제출력1 :

*

**

***

****

*****

 

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=n-i; j++) {	// n번째 행에는 n-i개의 공백 출력
				System.out.print(" ");	// 공백출력
			}
			for(int k=1; k<=i; k++) {
				System.out.printf("*");	// *출력
			}
			System.out.println();
		}
	}
}

// BufferedReader 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		br.close();
		
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=n-i; j++) {
				System.out.print(" ");
			}
			for(int k=1; k<=i; k++) {
				System.out.printf("*");
			}
			System.out.println();
		}
	}
}

 

11) 10952

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

입력 : 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 <A, B < 10)

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

예제입력1 :

1 1

2 3

3 4

9 8

5 2

0 0

예제출력1 :

2

5

7

17

7

 

// Scanner
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) {
				break;
			}
			System.out.println(a+b);
		}
	}
}

// BufferedReader, StringBuilder
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Multiple {
	public static void main(String[] args) throws IOException {
		
		// 문자열 한 줄을 한 번에 입력받기 때문에 공백까지 입력됨
		// 그러므로 공백 기준으로 문자열 분리를 해줘야 함(StringTokenizer)
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		
		while(true) {
			// 문자열 분리한 뒤 꺼내오는 메소드, st.nextToken()은 문자열 반환하므로
			// 형변환해줘야 함
			st = new StringTokenizer(br.readLine(), " ");
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			
			if (a==0 && b==0) {
				break;
			}
			sb.append((a+b)).append("\n");
		}
		System.out.println(sb);
	}
}

 

12) 10951

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

입력 : 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 <A, B < 10)

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

예제입력1 :

1 1

2 3

3 4

9 8

5 2

예제출력1 :

2

5

7

17

7

 

hasNextInt(), hasNext() 둘 중 아무거나 써도 상관없다. 어차피 입력이 아예 들어오지 않아 예외가 발생하는 형태가 같기 때문이다. 이것은 Scanner에서 정수를 입력받은 경우 True, 정수를 입력받지 않은 경우 False의 값을 반환하는 베소드이다.

 

// Scanner
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);
		}
	}
}

// BuffeedReader, StringBuilder
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		String str;
		
		while((str=br.readLine()) != null) {
			
			st = new StringTokenizer(str, " ");
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			sb.append(a+b).append("\n");
		}
		System.out.println(sb);
	}
}