자두의 데브로그

[자바] 10807번 개수 세기, 10810번 공 넣기, 10813번 공 바꾸기 본문

코딩테스트/문제 풀이

[자바] 10807번 개수 세기, 10810번 공 넣기, 10813번 공 바꾸기

왕자두 2024. 7. 4. 00:16

체력 이슈로 3일차는 매우 난이도가 낮은 문제들로 ,, 한 번에 풀이해보겠습니다~

 

1. [자바] 10807번 개수 세기 (https://www.acmicpc.net/problem/10807)

 

[문제 이해]

배열에 입력 받은 값을 저장하고 가장 마지막에 입력 받은 정수가 배열 안에 몇 개나 있는지 찾는 문제였다.

 

[문제 풀이]

arr에 차례로 저장하고 비교해서 출력만 하면 되는 간단한 문제였다! 

 

import java.io.*;
import java.util.*;

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());
        StringTokenizer st = new StringTokenizer(br.readLine());

        int[] arr = new int[N];
        for(int i = 0; i < N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int M = Integer.parseInt(br.readLine());

        int sum = 0;
        for(int i = 0; i < N; i++){
            if(arr[i] == M){
                sum+=1;
            }
        }
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        bw.write(String.valueOf(sum));
        bw.flush();
        bw.close();
    }
}

 

2. [자바] 10810번 공 넣기 (https://www.acmicpc.net/problem/10810)

 

[문제 이해]

배열에 값을 넣는 문제였는데 하나의 인덱스에는 하나의 값만 들어갈 수 있다고 쓰여있어서 추가적으로 작업을 해야될 것 같은 느낌이 들 수 있지만 하나의 인덱스에 별다른 처리를 하지 않으면 원래 하나의 값만 들어갈 수 있고 덮여 쓰여진다는 것만 알고 있으면 쉽게 풀 수 있는 문제였다.

 

[문제 풀이]

StringTokenizer를 for문 안에 넣어서 세 개의 변수를 받을 때 BufferedReader로 읽어오면서 초기화될 수 있게 지정해야되는데 처음에 for문 밖에 넣어뒀더니 오류가 낫다. (당연함) 입출력에서 아직도 헤맬 때가 있는 거 보면 개념을 다시 공부해야될지도,,

 

import java.io.*;
import java.util.*;

public class Main {

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

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] arr = new int[N];
        for(int e = 0; e < M; e++){
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            int k = Integer.parseInt(st.nextToken());
            for(int f = i-1; f < j; f++){
                arr[f] = k;
            }
        }

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for(int i = 0; i < N; i++){
            bw.write(String.valueOf(arr[i]) + " ");
        }
        bw.flush();
        bw.close();
    }
}

 

3. [자바] 10813번 공 바꾸기 (https://www.acmicpc.net/problem/10813)

 

[문제 이해]

배열의 원소끼리 바꾸는 문제로 tmp 와 같이 임시 변수를 만들어서 값을 바꾸기만 하면 되는 간단한 문제였다.

 

[문제 풀이]

for문 안에 임시로 사용할 변수를 만들어서 바꿀 값을 저장해두었다가 이 값을 원래 원하는 위치에 저장하는 방식으로 구현하였다. 문제에서는 바구니가 1부터 시작함으로 0부터 시작하는 배열의 인덱스에 맞춰주기 위해서는 각 인덱스에 모두 -1을 해줘야 한다.

 

import java.io.*;
import java.util.*;

public class Main {

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

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] arr = new int[N];
        for(int i = 0; i < N; i++){
            arr[i] = i+1;
        }
        for(int e = 0; e < M; e++){
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            int tmp = arr[i-1];
            arr[i-1] = arr[j-1];
            arr[j-1] = tmp;
        }

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for(int i = 0; i < N; i++){
            bw.write(String.valueOf(arr[i]) + " ");
        }
        bw.flush();
        bw.close();
    }
}