03. 반복문

쉬운 목차

1분기 N을 입력으로 받아서 N 구구단을 출력하는 프로그램을 작성하세요. 출력 형식에 따라 인쇄하면 됩니다.

입력: N은 첫 번째 줄에 지정됩니다. N은 1보다 크거나 같고 9보다 작거나 같습니다.

출력: 출력 형식과 동일하게 N*1에서 N*9까지 출력합니다.

백준 2739호 약어

더보기

import java.util.*;
    public class Main {
        public static void main(String args()) {
                Scanner sc = new Scanner(System.in);

                int n = sc.nextInt();

                for(int i=1; i<=9; i++){
                    System.out.println(n + " * " + i + " = " + n*i);
                }
                sc.close();
        }
    }

정수를 n으로 입력하고 n*i를 실행할 수 있습니다. N*1에서 N*9까지의 범위이므로 i의 범위는 1에서 9로 설정되었습니다. (i=1, i<10이면 상관없습니다.)

Q2. 두 개의 정수 A와 B를 입력으로 받아 A+B를 출력하는 프로그램을 작성하세요.

입력: 테스트 케이스의 수 T가 첫 번째 줄에 지정됩니다. 각 테스트 케이스는 한 줄로 구성되며 각 줄에는 A와 B가 지정됩니다.

출력: 각 테스트 케이스에 대해 A+B를 출력합니다.

백준 #10950 약어

더보기

import java.util.*;
    public class Main {
        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();
        }
    }

배열을 사용하지 않는 가장 간단한 방법입니다. 이렇게 쓰면 출력 예제처럼 한꺼번에 값을 출력하는 것이 아니라 입력할 때마다 값이 출력됩니다.

import java.util.*;
    public class Main {
        public static void main(String args()) {
                Scanner sc = new Scanner(System.in);

                int T = sc.nextInt();
                int arr() = new int(T);

                for(int i=0; i<T; i++){
                    int A = sc.nextInt();
                    int B = sc.nextInt();
                    arr(i) = A+B;
                }
                sc.close();

                for (int j:arr){
                    System.out.println(j);
                }
        }
    }

배열을 사용하면 출력 예와 같이 결과 값을 배열로 모아서 출력할 수 있으므로 값을 별도로 입력하고 출력할 수 있습니다.

3분기 n이 주어지면 1에서 n까지의 합을 구하는 프로그램을 작성하십시오.

입력: 첫 번째 줄에 n이 주어집니다.

출력: 1에서 n까지의 합계를 반환합니다.

백준 #8393 약어

더보기

import java.util.*;
    public class Main {
        public static void main(String args()) {
                Scanner sc = new Scanner(System.in);
                int sum = 0;
                int n = sc.nextInt();

                for(int i=1; i<=n; i++){
                    sum += i;
                }
                sc.close();
                System.out.print(sum);
        }
    }​

합계를 저장할 변수 sum을 선언하고 for 문의 반복 횟수를 저장할 변수 n을 선언합니다. 루프문을 실행하고 i부터 n까지의 합을 sum에 저장하고 결과를 출력합니다.

4분기 준원은 지난주 생애 처음으로 코스트코를 찾았다. 정말 멋졌습니다. 참, 몇 개도 안 적었는데도 수상하게 많은 양이 나왔어요! 준원은 영수증을 보고 청구서가 맞는지 확인하려고 합니다. 영수증에 적힌 구매한 각 아이템의 가격과 수량, 구매한 상품의 총 수량그리고 구매한 상품의 가격과 개수로 계산한 총액이 영수증에 기재된 총액과 일치하는지 확인합니다.

입력: 첫 번째 줄은 영수증의 총 금액 X를 나타냅니다. 두 번째 줄에는 영수증에서 구매한 항목 유형의 수인 N이 포함됩니다. 다음 N행에는 각 항목의 가격 a와 수량 b가 간격을 두고 표시됩니다.

출력 : 가격과 구매수량을 기준으로 계산한 총액이 영수증의 총액과 일치하면 Yes로 출력됩니다. 일치하지 않으면 No를 입력합니다.

백준 #25304 약어

더보기

import java.util.*;
    public class Main {
        public static void main(String args()) {
                Scanner sc = new Scanner(System.in);
                int X = sc.nextInt();
                int Y = sc.nextInt();
                int sum = 0;

                for(int i=0; i<Y; i++){
                    int a = sc.nextInt();
                    int b = sc.nextInt();
                    sum += a*b;
                }
                sc.close();
                if(sum==X){
                    System.out.print("Yes");
                }
                else{
                    System.out.print("No");
                }
        }
    }

이것은 배열을 사용하지 않는 가장 간단한 솔루션입니다. 상품 가격(a)*개수(b)의 합을 변수 sum에 저장한 후 영수증에 적힌 총액(X)과 비교하여 yes 또는 no를 반환합니다.

import java.util.*;
    public class Main {
        public static void main(String args()) {
                Scanner sc = new Scanner(System.in);
                int X = sc.nextInt();
                int Y = sc.nextInt();
                int sum = 0;

                for(int i=0; i<Y; i++){
                    int a = sc.nextInt();
                    int b = sc.nextInt();
                    sum += a*b;
                }
                sc.close();
                System.out.println(sum==X?"Yes":"No");
        }
    }

조건문을 생략하고 삼항 연산자로 출력 부분을 수정하는 풀이 방법입니다.

import java.util.*;
    public class Main {
        public static void main(String args()) {
                Scanner sc = new Scanner(System.in);
                int X = sc.nextInt();
                int Y = sc.nextInt();

                for(int i=0; i<Y; i++){
                    int a = sc.nextInt();
                    int b = sc.nextInt();
                    X = X - (a*b);
                }
                sc.close();
                System.out.println(X==0?"Yes":"No");
        }
    }

이 솔루션은 총 금액 X에서 객체의 가격(a*b)을 빼고 0이 되면 Yes를 반환하는 방법입니다.

Q5. 오늘은 혜아의 소개일입니다. 인터뷰를 준비하고 질문에 잘 답한 혜아는 최종 프로그래밍 과제를 보드판으로 받았다. 혜아에게 주어진 과제는 두 수를 더하는 것이었다. C++ 책을 열심히 읽던 혜아는 단순히 보드에 두 개의 숫자를 더하는 코드를 작성했습니다. 코드를 본 면접관은 “I/O가 N 바이트 크기의 정수라면 어떻게 프로그램을 구현해야 할까요?”라고 질문했습니다. 혜아는 책에서 정수형 자료형에 대해 했던 말이 생각났다. 책에서는 long int가 최대 4바이트 정수를 저장할 수 있는 정수 데이터 유형이고 long long int가 최대 8바이트 정수를 저장할 수 있는 정수 데이터 유형이라고 설명합니다. 혜아는 생각했다. “int 앞에 long을 하나 더 추가할 때마다 4바이트를 저장할 수 있는 공간이 늘어나나요? 당연히 long long long int는 12바이트까지 저장할 수 있는 정수 데이터 타입이고, long long long long int는 16바이트까지 저장할 수 있습니다! 혜아가 최대 N 바이트의 정수를 저장할 수 있다고 생각해서 보드에 쓴 정수 데이터 유형의 이름은 무엇입니까?


입력: 첫 번째 행에는 관련 정수 N이 포함됩니다.

출력: Hyea가 최대 N바이트 정수를 저장할 수 있다고 믿는 정수 데이터 유형의 이름을 출력합니다.

더보기

import java.util.*;
    public class Main {
        public static void main(String args()) {
                Scanner sc = new Scanner(System.in);

                int N = sc.nextInt();
                StringBuilder sb = new StringBuilder();
                for(int i=0; i<N/4; i++){
                    sb.append("long ");
                }
                sb.append("int");
                System.out.println(sb);
        }
    }

for 문을 풀면 long은 4바이트이므로 N/4를 해서 몫만큼 long을 더하면 된다. StringBuilder를 사용하여 String 객체를 선언하고 조건식의 결과 값과 함께 append() 메서드를 사용하여 long을 추가합니다. 루프가 끝나면 int가 끝에 추가되고 인쇄됩니다.

StringBuilder 변수 이름 = new StringBuilder();

StringBuilder 변수명 = new StringBuilder(“성일”); 다음과 같이 문자열을 직접 붙여넣을 수도 있습니다.

.append(); 문자열 뒤에 문자열을 추가하는 메서드입니다.