본문 바로가기

코딩테스트

[JAVA] 반복문

2793 구구단

자바의 구구단은 for문, while 문, do-while문이 있다.

그중 가장 많이 사용하는 반복문은 for문으로, for (초기문; 조건식; 반복 후 작업){ ~~ } 으로 사용한다.

반복 후 작업문에 콤마로 분리하여 2문장을 작성할 수도 있고, for 문안에서만 사용되는 변수를 선언할 수도 있다.

조건식에 true 혹은 작성을 하지 않으면 무한반복이다.

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

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int i=Integer.parseInt(br.readLine());
    int j=1;
    for (j=1;j<10;j++){
      bw.write(i+" * "+j+" = "+i*j);
      bw.write("\n");
    }
    
    bw.flush();
    bw.close();
    br.close();
  }
}

BufferedWriter는 int형 변수를 작성해고 int형으로 출력되지 않는다고 한다.

 


10950 A+B-3

 

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

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int i=Integer.parseInt(br.readLine());
    for (int k=0;k<i;k++){
      StringTokenizer st = new StringTokenizer(br.readLine(), " ");
      bw.write(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())+"\n");
      bw.flush();
    }
    //bw.flush();
    bw.close();
    br.close();
  }
}

나는 입력할때마다 바로 출력되게 해야하는 줄 알았는데, 출력결과를 저장하고 한번에 출력해도 된다.

즉, 주석처리한 부분에 bw.flush()를 넣어도 정답처리된다.

 

시간을 더 단축하고 싶다면 StringBuilder 메소드(문자열 합치기)를 이용할 수도 있다.

BufferedWriter와 비슷한 방식으로 진행하고 append로 저장, print로 한번에 출력한다.


8393 합

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
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=0;
    int i=Integer.parseInt(br.readLine());
    for (int k=1;k<=i;k++){
      a+=k;
    }

    System.out.println(a);
   
    br.close();
  }
}

변수 입력은 한번만 받으니 더 간단하게 int i=Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());

도 가능


25304 영수증

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

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    
    int all=Integer.parseInt(br.readLine());
    int num=Integer.parseInt(br.readLine());
    int a=0;
    for (int k=0;k<num;k++){
      StringTokenizer st = new StringTokenizer(br.readLine(), " ");
      a=Integer.parseInt(st.nextToken())*Integer.parseInt(st.nextToken())+a;
    }
    if (all==a){
      System.out.println("Yes");
    }
    else{
      System.out.println("No");
    }

   
    br.close();
  }
}

25314 코딩은 체육과목 입니다

 

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

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

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 i=Integer.parseInt(br.readLine())/4;
    for (int k=0;k<i;k++){
      bw.write("long ");
    }
    bw.write("int");
    bw.flush();
    
    bw.close();
    br.close();
  }
}

15552 빠른 A+B

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

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int i = Integer.parseInt(br.readLine());
    StringTokenizer st;

    for (int k = 0; k < i; k++) {
      st = new StringTokenizer(br.readLine(), " ");
      bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + "\n");
    }
    bw.flush();
    bw.close();
    br.close();
  }
}

한줄에 하나씩이라며!

flush()를 반복문에 넣으면 시간초과난다.


2438 별 찍기 - 1

 

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

  public class Main {
    public static void main(String args[]) throws IOException {

      int i=Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());

      
      for (int n = 1; n <= i; n++) {
        for (int j = 1; j <= n; j++) {
          System.out.print("*");
        }
        System.out.println();
      }
    }

  }

n, i, j 변수가 헷갈리지 않게 주의하자.


2439 별 찍기 - 2

 

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

public class Main {
  public static void main(String args[]) throws IOException {

    int i=Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());


    for (int n = 1; n <= i; n++) {
      for (int j = i-n; j >0; j--) {
        System.out.print(" ");
      }
      for (int j = 1; j <=n; j++) {
        System.out.print("*");
      }
      System.out.println();
    }
  }

}

처음에 j>0이 아니라 j>=0으로 잘못했더니 출력 형식이 잘못됐다고 틀렸당..ㅎ


10952 A+B - 5

코드는 위와 비슷하지만 무한루프로 해주어야한다. 무한루프로 가장 많이 쓰는 방식은 while(true)

그리고 반복문 안에 조건과 함께 break;를 넣어주자.

if (a==0 && b==0){
	break;
}

10951 A+B - 4

반복문의 종료조건이 없다.

즉 입력에서 데이터를 읽을 수 없을 때 종료한다.

데이터를 읽을 수 없는 것, 즉 데이터가 없을 때 EOF(End Of File)이라 한다.

 

Scanner와 BufferedReader 읽을 데이터가 없는 경우 반환하는 데이터가 다르다.

우리가 입력을 할 때 예외처리를 하려면 ctrl+z로 강제 종료 혹은 정수가 아닌 문자열을 입력해 오류를 일으킨다.

 

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

nextInt()를 통해 데이터를 입력받는다. 이 때 데이터가 올바르지 않은 경우 예외를 던지며 입력을 받지 않고 hasnextInt()에서 False를 반환한다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
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.print(sb);
	}
}

 

BufferedReader는 null을 반환한다.


# 회고

 

아직 익숙하지 않아서 error: cannot find symbol 오류를 참 많이 만났다.

오타 오류..

'코딩테스트' 카테고리의 다른 글

[JAVA] 문자열  (0) 2024.01.16
[JAVA] 1차원 배열  (0) 2024.01.14
[JAVA] 조건문  (0) 2024.01.12
[JAVA] 입출력과 사칙연산  (1) 2024.01.10
[BAEKJOON] 24060 : 알고리즘 수업 - 병합 정렬 1  (0) 2023.07.28