묠니르묘묘
꾸준히 성장하는 개발자스토리
묠니르묘묘
전체 방문자
오늘
어제
  • 분류 전체보기 (188)
    • 프로그래밍 (48)
      • 디자인패턴 (4)
      • 예외,에러 (4)
      • Java (29)
      • Kotlin (3)
      • React.js (4)
      • JavaScript (2)
      • Apache Kafka (2)
    • Spring (49)
      • Spring (21)
      • Spring Cloud (3)
      • JPA (25)
    • 코딩테스트 (31)
      • 알고리즘 (5)
      • Java - 백준 (26)
      • Java - 프로그래머스 (0)
    • AWS (7)
    • 데이터베이스 (6)
    • 개발 etc (23)
    • 도서 (5)
    • 회고록 (4)
    • 데브코스-데이터엔지니어링 (15)

인기 글

최근 글

hELLO · Designed By 정상우.
묠니르묘묘

꾸준히 성장하는 개발자스토리

[백준] 3052번 - Java(자바)
코딩테스트/Java - 백준

[백준] 3052번 - Java(자바)

2022. 1. 25. 01:44

백준 3052번 자바

https://www.acmicpc.net/problem/3052

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net

 

 

 

 

알고리즘

첫째 줄부터 열번째 줄까지 정수가 주어진다. ( 0<= 정수 <= 1000 )

각 정수들을 42로 나누었을때, 서로 다른 나머지가 몇 개 있는지 출력한다.

 

정수 % 42를 구하면 제일 높은 숫자가 41이다. 그러므로 42길이 boolean 배열을 만든다.

정수 % 42를 해서 나오는 값을 인덱스로 해서 true로 바꿔준다.

그 후 true인 것을 숫자로 세서 출력하면 될 듯 하다.

 

1. boolean[42]를 만든다.

2. 10번 반복문을 돌린다.

  2-1. boolean[입력받은 정수 % 42] = true;

3. int count = 0 을 만든다.

4. boolean[] 길이만큼 반복문을 돌린다.

  4-1. true인 값이 나온다면 count를 +1을 해준다.

5. count를 출력한다.

 

 

 

풀이1

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

public class No_3052 {
    public static void main(String[] args) throws IOException {
        boolean[] arr = new boolean[42];
        int count = 0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        for (int i = 0; i < 10; i++) {
            arr[Integer.parseInt(br.readLine()) % 42] = true;
        }

        for (boolean v : arr) {
            if(v) count++;
        }
        System.out.println(count);
    }
}

알고리즘대로 썼다.

BufferedReader는 String으로 받기때문에 Integer.parseInt()를 통해 int형으로 바꿔준 것이다.

2번째 for문은 for-each문이라고 arr 값만큼 반복해서 v에 값을 넣어준다.

for ( int i = 0; i < arr.length; i++) {
  boolean v = arr[i];
  if(v) count++;
}

풀어서 쓰면 위같은 느낌이다.

 

 

 

풀이2

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

public class No_3052 {
    public static void main(String[] args) throws IOException {
        boolean[] arr = new boolean[42];
        int count = 0;
        int num;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        for (int i = 0; i < 10; i++) {
            num = Integer.parseInt(br.readLine()) % 42;
            if (!arr[num]) {
                arr[num] = true;
                count++;
            }
        }
        System.out.println(count);
    }
}

이번에는 for문을 2번돌리는 것보다는 한번에 돌려서 확인하는 방법이다.

10번 반복문을 돌리는데 int num에다가 나머지 값을 대입하고,

arr[num]이 false면 true로 바꾸고 count++ 해준다.

 

 

 

풀이3

정수 10개의 나머지 값들을 받아서 비교하는 식으로 해보면 어떨까??

이것들을 저장할 int배열을 만들어서 넣은 후 하나씩 꺼내서 서로 비교하는 풀이법을 만들어보자.

그런데 무작위로 값이 들어가니까 Arrays.sort()로 정렬을 해서 앞뒤로 비교하면 되겠다.

이렇게 쓰다보니 나머지 값들을 중복값이 생성안되는 Set에다가 넣어보는것도 괜찮을 것 같다.

(컬렉션 중 단일 값으로 쓰는 List, Queue, Set 중에서 중복과 순서가 없는것이 Set이니까)

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

public class No_3052 {
    public static void main(String[] args) throws IOException {
        int[] arr = new int[10];
        int count = 1;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        for (int i = 0; i < 10; i++) {
            arr[i] = Integer.parseInt(br.readLine()) % 42;
        }

        Arrays.sort(arr);
        int copy = arr[0];
        
        for (int i = 1; i < 10; i++) {
            if (copy != arr[i]) {
                count++;
            }
            copy = arr[i];
        }

        System.out.println(count);
    }
}

 

 

 

 

풀이4

풀이3번을 쓰면서 생각했던 Set을 써보자.

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

public class No_3052 {
    public static void main(String[] args) throws IOException {
        HashSet<Integer> arr = new HashSet<Integer>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        for (int i = 0; i < 10; i++) {
            arr.add(Integer.parseInt(br.readLine()) % 42);
        }
        System.out.println(arr.size());
    }
}

HashSet은 Set을 구현한 클래스라서 add를 하면 중복값이 들어가지 않는다.

그래서 arr.size()로 크기를 출력하면 된다.

저작자표시 (새창열림)

'코딩테스트 > Java - 백준' 카테고리의 다른 글

[백준] 8958번 - Java(자바)  (0) 2022.01.28
[백준] 1546번 - Java(자바)  (0) 2022.01.27
[백준] 2577번 - Java(자바)  (0) 2022.01.23
[백준] 2562번 - Java(자바)  (0) 2022.01.18
[백준] 10818번 - Java(자바)  (0) 2022.01.14
    '코딩테스트/Java - 백준' 카테고리의 다른 글
    • [백준] 8958번 - Java(자바)
    • [백준] 1546번 - Java(자바)
    • [백준] 2577번 - Java(자바)
    • [백준] 2562번 - Java(자바)
    묠니르묘묘
    묠니르묘묘

    티스토리툴바