문제

자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

출력

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


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

public class al2741 {

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

 

이전 문제와 마찬가지로 BufferReader와 BufferWriter를 사용한다.

BufferWriter를 사용하는 걸 까먹고 sysout으로 출력해서 제출한 것과 메모리와 시간 차이가 확연하다. 싱기싱기

'자료구조와 알고리즘' 카테고리의 다른 글

백준 11021번 A+B  (0) 2020.04.30
백준 2742번 기찍 N  (0) 2020.04.30
백준 15552번 빠른 A+B  (0) 2020.04.27
백준 8393번 합  (0) 2020.04.27
백준 10950번 A+B  (0) 2020.04.27

문제

본격적으로 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()을 추가로 해 주는 것이 좋다.

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

자세한 설명 및 다른 언어의 경우는 이 글에 설명되어 있다.

이 블로그 글에서 BOJ의 기타 여러 가지 팁을 볼 수 있다.

입력

첫 줄에 테스트케이스의 개수 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 al15552 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		for (int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			int sum = a + b;
			bw.write(sum + "\n");
		}
		bw.flush();
		bw.close();
	}

}

 

BufferedReader는 readLine()을 통해 입력값을 읽는다.

BufferedReader의 리턴 타입이 String이기 때문에 int 타입으로 parse해야 한다.

StringTokenizer의 nextToken()이 BufferedReader의 readLine()의 입력값을 공백 단위로 구분하여 순서대로 호출한다.

nextToken()의 두 번째 인자로 구분자를 지정할 수 있다.

BufferedReader는 System.out.println과 유사하나, ln의 역할을 하는 "\n"을 와일드카드 처리해야 하는 차이가 있다.

마지막으로 flush()를 하여 남아 있는 데이터를 모두 출력시키고 close()를 하여 스트림을 닫는다.

'자료구조와 알고리즘' 카테고리의 다른 글

백준 2742번 기찍 N  (0) 2020.04.30
백준 2741번 N 찍기  (0) 2020.04.28
백준 8393번 합  (0) 2020.04.27
백준 10950번 A+B  (0) 2020.04.27
백준 2739번 구구단  (0) 2020.04.26

문제

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

입력

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

출력

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

import java.util.Scanner;

public class al8393 {

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

}

'자료구조와 알고리즘' 카테고리의 다른 글

백준 2741번 N 찍기  (0) 2020.04.28
백준 15552번 빠른 A+B  (0) 2020.04.27
백준 10950번 A+B  (0) 2020.04.27
백준 2739번 구구단  (0) 2020.04.26
백준 2884번 알람 시계  (0) 2020.04.26

문제

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

입력

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

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

출력

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

import java.util.Scanner;

public class al10950 {

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

}

'자료구조와 알고리즘' 카테고리의 다른 글

백준 15552번 빠른 A+B  (0) 2020.04.27
백준 8393번 합  (0) 2020.04.27
백준 2739번 구구단  (0) 2020.04.26
백준 2884번 알람 시계  (0) 2020.04.26
백준 14681번 사분면 고르기  (0) 2020.04.26

문제

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

입력

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

출력

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

import java.util.Scanner;

public class al2739 {

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

}

 

나.. 이거 못 풀까봐.. 걱정했다... 그치만 쌉가능

'자료구조와 알고리즘' 카테고리의 다른 글

백준 8393번 합  (0) 2020.04.27
백준 10950번 A+B  (0) 2020.04.27
백준 2884번 알람 시계  (0) 2020.04.26
백준 14681번 사분면 고르기  (0) 2020.04.26
백준 2753번 윤년  (0) 2020.04.26

문제

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.

상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.

이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다.

바로 "45분 일찍 알람 설정하기"이다.

이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.

현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 놓은 알람 시간 H시 M분을 의미한다.

입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.

출력

첫째 줄에 상근이가 창영이의 방법을 사용할 때, 설정해야 하는 알람 시간을 출력한다. (입력과 같은 형태로 출력하면 된다.)

import java.util.Scanner;

public class al2884 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int h = sc.nextInt();
		int m = sc.nextInt();
		sc.close();

		if (h == 0) {
			if (m < 45) {
				h = 23;
				m = m + 15;
			} else {
				m = m - 45;
			}
		} else {
			if (m < 45) {
				h = h - 1;
				m = m + 15;
			} else {
				m = m - 45;
			}
		}
		System.out.println(h + " " + m);
	}
}

이게 내가 한건데

import java.util.Scanner;

public class al2884 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int h = sc.nextInt();
		int m = sc.nextInt();
		sc.close();
		int alarm = (60 * h) + m - 45;
        
		if (alarm < 0) {
			alarm += 60 * 24;
		}
		
		System.out.println(alarm / 60 + " " + alarm % 60);
	}

}

더 훌륭한 코드가 있어서 가져와 봄.

알람을 분 단위로 만들고, 0시일 때는 23시로 넘어가도록 분기처리.

'자료구조와 알고리즘' 카테고리의 다른 글

백준 10950번 A+B  (0) 2020.04.27
백준 2739번 구구단  (0) 2020.04.26
백준 14681번 사분면 고르기  (0) 2020.04.26
백준 2753번 윤년  (0) 2020.04.26
백준 9498번 시험 성적  (0) 2020.04.25

+ Recent posts