[백준] 15829번 : Hashing - JAVA

2024. 4. 17. 21:20·백준

 

 

15829 Hashing

 

 

이번 문제는 친절하게도 문제에서 어떻게 연산을 하라고 다 알려주고 있지만 필자는 처음에 50점을 맞았다...

 

필자의 처음 생각으로는 알파벳 a가 1이 나와야 하고 a의 아스키코드 값이 96이니까 -95를 더했고

$a_i * r^i$ 이 수식은 반복문을 사용하며 제곱의 경우 Math 클래스의 pow 메서드를 사용하면 되겠다고 생각을 하였다.

그러나 오버플로우가 발생하여 50점이 나왔다.

 

실패한 소스 - 오버플로우 발생

final int NUMBER = 31;
final int M = 1234567891;

int l = Integer.parseInt(br.readLine());
String str = br.readLine();
long sum = 0L;

for (int i = 0; i < str.length(); i++) {
    // Math.pow부터 이미 오버플로우가 발생함
    sum += (str.charAt(i) - 96) * ((long) Math.pow(NUMBER, i));
}

System.out.println(sum % M);

 

어떻게 보면 당연한 것을 놓쳐버렸다...

 

위와 같이 Math 클래스의 pow 메소드를 사용하는 경우 오버플로우가 발생하여 직접 제곱을 해주는 방식으로 변경하였고 100점으로 통과하게 되었다.

 

성공한 소스

public class Main {

    public static void main(String[] args) throws IOException {
        final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        final StringBuilder sb = new StringBuilder();
        final int NUMBER = 31;
        final int M = 1234567891;

        int L = Integer.parseInt(br.readLine());
        String str = br.readLine();
        long sum = 0L;
        long pow = 1L;

        for (int i = 0; i < L; i++) {
            sum += (str.charAt(i) - 96) * pow;
            pow = (pow * NUMBER) % M;
        }

        sb.append(sum % M);

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

}

 

 

쉬워보인다고 가볍게 넘어가지 말고 다시 한번 살펴보는 습관을 가지자!

 

 

저작자표시 비영리 변경금지 (새창열림)

'백준' 카테고리의 다른 글

[백준] 18111번 : 마인크래프트 - JAVA  (0) 2024.04.26
[백준] 18110번 : solved.ac - JAVA  (0) 2024.04.19
[백준] 2108번 : 통계학 - JAVA  (0) 2024.04.12
[백준] 11576번 : Base Conversion - JAVA  (0) 2024.03.31
[백준] 11005번 : 진법 변환 2 - JAVA  (0) 2024.03.31
'백준' 카테고리의 다른 글
  • [백준] 18111번 : 마인크래프트 - JAVA
  • [백준] 18110번 : solved.ac - JAVA
  • [백준] 2108번 : 통계학 - JAVA
  • [백준] 11576번 : Base Conversion - JAVA
masjeong
masjeong
교양이란 화를 내지 않으면서도 자신의 신념을 잃지 않은 채 어떤 얘기라도 들을 수 있는 능력을 말한다 - 로버트 프로스트
  • masjeong
    나자바바라쿠배
    masjeong
  • 전체
    오늘
    어제
    • 전체보기 (28)
      • Spring Boot (3)
      • Spring Batch (1)
      • MSA (3)
      • Docker (1)
      • 백준 (16)
      • 자료구조 (3)
      • Kafka (0)
      • DB (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MSA
    Cloud Native Architecture
    정렬
    18110
    Queue
    ratelimiter
    2449
    ExecutionContext
    티스토리챌린지
    이진탐색
    큐
    백준3041
    백준
    15829
    알고리즘
    이분탐색
    springboot
    오블완
    11561
    mariadb
    진법변환
    spring cloud Gateway
    Java
    cloud native application
    spring batch
    executortype
    gradle 오류
    SpringCloud
    18111
    백준11723
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
masjeong
[백준] 15829번 : Hashing - JAVA
상단으로

티스토리툴바