반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 스택
- 구현
- Queue
- 프로그래머스
- 수학
- 다이나믹 프로그래밍
- 브루트포스 알고리즘
- 정수론
- 문자열제곱
- 큰 수 연산
- LeetCode Remove Duplicates from Sorted List in c
- 문자열
- 사칙연산
- 자료 구조
- 재귀
- 큐
- LeetCode 83 c언어
- 시뮬레이션
- 해시를 사용한 집합과 맵
- LeetCode 83번
- KMP알고리즘
- 연결리스트 정렬
- 별 찍기
- 조합론
- 임의 정밀도 / 큰 수 연산
- 연결리스트 중복제거
- 이분 탐색
- 정렬
- 유클리드 호제법
- 실패함수
Archives
- Today
- Total
hahn
[백준 - JAVA] Hashing 본문
728x90
반응형
15829번: Hashing
APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정
www.acmicpc.net
http://boj.kr/0f99738217d84c81be87df3ddb708149
공유 소스 보기
www.acmicpc.net
더보기
import java.util.Scanner;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
long result = 0,
trash = sc.nextInt();
String str = sc.next();
char[] arr = str.toCharArray();
for(int i = arr.length - 1; i > -1; i--) {
result += ((int) arr[i] - 96);
if(i == 0) break;
result *= 31;
if(result > 1234567891) result %= 1234567891;
}
System.out.println((int)result);
}
}
해싱 문제다.. 해싱에 관해서는 문제 설명에 다 쓰여있다.
처음에 그냥 막힘 없이 풀면서 음.. 값 초과하려나? 하고
제출했는데 처음 보는 50점이 나왔다
???????????
문제 다시 보니까 값의 범위에 따라 점수가 다르게 나오는 걸 확인
나중에 풀어야 지하고 오늘 풀었다.
풀이 전개 방식은
ex. 1 × 31^0 + 2 × 31^1 + 3 × 31^2 + 4 × 31^3 + 5 × 31^4
얘를 역으로 뒤에서부터 연산하게 했다.
5에 31 곱하고
4 더하고 31을 곱하면
5*31과 4를 쪼개서
각각 31을 곱하는 것과 동일하니
이렇게 하면 될 거 같았다.
double로 바꿔서 풀었는데 자꾸 틀렸습니다 나오는 걸 보고
음.. 전에 부동소수점인가 뭐라 들었던 거 같은데 하면서
소수가 없는데 왜 그럴까 고민하고 있었다.
근데 잘 보니까 1.~~~e71 이런 식으로 출력되는 걸 보고
저럼 안되는갑다 싶어서 자료형에 대해 다시 읽어보고
long으로 제출했다. 통과
728x90
반응형
'코딩테스트 연습 > 백준(JAVA)' 카테고리의 다른 글
[백준 - JAVA] 단어 정렬 /// 진행 중 (0) | 2021.09.11 |
---|---|
[백준 - JAVA] 이항계수 1 (0) | 2021.09.11 |
[백준 - JAVA] 팰린드롬수 (0) | 2021.09.04 |
단계별로 풀어보기(문자열 알고리즘1 - 문자열 제곱) (0) | 2021.09.01 |
단계별로 풀어보기(브루트 포스 - 덩치) (0) | 2021.08.31 |