Java Day 12

YDC·2025년 6월 22일

우테코8기

목록 보기
12/23

Day11 복습

Stack이란?

나중에 넣는게 제일 먼저 나오는 LIFO(Last In First Out) 구조

메서드 설명 예시

push() 데이터를 스택에 넣는다 stack.push("운동")
pop() 스택에서 가장 최근 항목을 꺼낸다 stack.pop() → "운동"
isEmpty() 스택이 비었는지 확인 stack.isEmpty() → true/false

개념설명
FileReader파일을 문자 단위로 읽는 스트림 클래스. 텍스트 파일 읽기에 사용됨
BufferedReaderFileReader를 감싸서 버퍼를 사용하고 한 줄 단위로 읽기 가능하게 해줌
readLine()BufferedReader에서 제공하는 메서드로, 한 줄씩 문자열로 읽고 개행(\n)은 제거됨

학습 목표

1.백준 3문제

  • 8393 합
  • 25304 영수증
  • 25314 코딩은 체육과목 입니다.

2.기능 추가

  • 자동 저장기능 (Auto Save) 기능 추가

3.CS 공부

  • 프로세스 동기화(실패)

백준 3문제

8393 합

문제

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

입력

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

출력

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

예제 입력 1

3

예제 출력 1

6

풀이

package loop;
import java.util.Scanner;

public class BOJ_8393_Sum {
    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;
        }
        System.out.println(sum);
    }
}

기본적인 반복문 + 변수 누적

2.25304번 영수증

문제

준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.
영수증에 적힌,구매한 각 물건의 가격과 개수 구매한 물건들의 총 금액을 보고, 
구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.

입력

첫째 줄에는 영수증에 적힌 총 금액 X
둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N이 주어진다.
이후 
N개의 줄에는 각 물건의 가격 a와 개수 b가 공백을 사이에 두고 주어진다.

출력

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

제한

 1≤X≤1000000000
1N1001 ≤ N ≤ 100
1a10000001 ≤ a ≤ 1\,000\,000 
1b101 ≤ b ≤ 10

예제 입력 1

260000
4
20000 5
30000 2
10000 6
5000 8

예제 출력 1

Yes

영수증에 적힌 구매할 물건들의 목록으로 계산한 총 금액은 20000 × 5 + 30000 × 2 + 10000 × 6 + 5000 × 8 = 260000원이다. 이는 영수증에 적힌 총 금액인 260000원과 일치한다. 

예제 입력 2

250000
4
20000 5
30000 2
10000 6
5000 8

예제 출력 2

No

풀이

package loop;
import java.util.Scanner;
public class BOJ_25304_ReceiptCheck {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long x = sc.nextLong();
        int  n = sc.nextInt();
        int cost = 0;
        for (int i = 1; i <= n; i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            cost += a * b;
        }
        if (x == cost) {
            System.out.println("Yes");
        }else  {
            System.out.println("No");
        }
    }

}

For 반복문 연산로직 구성 및 반복문 + 조건문 사용 범위 에 따른 long 사용

3.25314 코딩은 체육과목 입니다

문제

오늘은 혜아의 면접 날이다. 면접 준비를 열심히 해서 앞선 질문들을 잘 대답한 혜아는 이제 마지막으로 칠판에 직접 코딩하는 문제를 받았다. 혜아가 받은 문제는 두 수를 더하는 문제였다. C++ 책을 열심히 읽었던 혜아는 간단히 두 수를 더하는 코드를 칠판에 적었다. 코드를 본 면접관은 다음 질문을 했다. “만약, 입출력이 
N바이트 크기의 정수라면 프로그램을 어떻게 구현해야 할까요?”
혜아는 책에 있는 정수 자료형과 관련된 내용을 기억해 냈다.
책에는 long int는 4바이트 정수까지 저장할 수 있는 정수 자료형이고 
long long int는 8바이트 정수까지 저장할 수 있는 정수 자료형이라고 적혀 있었다.
혜아는 이런 생각이 들었다. “int 앞에 long을 하나씩 더 붙일 때마다 
4바이트씩 저장할 수 있는 공간이 늘어나는 걸까?
분명 long long long int는 12바이트
long long long long int는 16바이트까지 저장할 수 있는 정수 자료형일 거야!”
그렇게 혜아는 당황하는 면접관의 얼굴을 뒤로한 채 칠판에 정수 자료형을 써 내려가기 시작했다.
혜아가 N바이트 정수까지 저장할 수 있다고 생각해서 칠판에 쓴 정수 자료형의 이름은 무엇일까?

입력

첫 번째 줄에는 문제의 정수 N이 주어진다. 
4<=N<= 1000 N은 4의 배수

출력

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

예제 입력 1 

4

예제 출력 1

long int

예제 입력 2

20

예제 출력 2

long long long long long int

풀이

package loop;
import java.util.Scanner;

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

문자열을 추가 String “” 사용과 문자열 처리감각만 있으면 해결 가능

2.기능추가

1.자동저장(AutoSave)추가

static void vs void의 차이

구분설명예시
static void클래스 자체에서 호출 가능한 메서드 (객체 생성 불필요)main() 메서드, Math.max(1, 2)
void**인스턴스(객체)**를 생성해야 호출 가능TodoService.printAll()

TodoService.printAll() 같은 인스턴스 메서드

TodoService 메소드 추가 및 코드 수정

자동저장 메소드 생성 및 add,remove,isDone,undo등에
autoSave();코드 추가
private void autoSave(){
    TodoManager.saveTodosToFile(todos, "todos.json");

리뷰

네.. 오늘 놀아 버렸습니다… 공부 많이 못했습니다… 이번주 목표로 했던
기능추가 다하기와 .. 백준 15문제만 완료하고 … 마무리했습니다..
사람이 끝마무리가 좋아야하는데 내일 반드시 테스트 코드 추가와 cs공부를 하겠습니다
다음주는 이번주보다 더 멋있게 살겠습니다… 그래도 백준은 다맞아서 기분이 좋습니다…
놀았지만 다시 앉아서 공부한 나 멋있습니다…

profile
초심자

0개의 댓글