[Java] 순열과 조합을 구현하기 위한 Next Permutation 알고리즘에 대해서
·
Developer/Java
Java0. 들어가며문제 링크: https://www.acmicpc.net/problem/10972 최근 알고리즘 문제를 풀다가 "백준 10972 다음 순열"이라는 문제를 접하게 되었습니다. 처음 문제를 봤을 때는 “순열이면 그냥 재귀(Back Tracking)로 다 만들어서 다음 걸 찾으면 되는 거 아닌가?”라고 생각했습니다. 결과는 "시간 초과"였습니다. 당연하게도 그냥 다음 순열만 구하면 되는 건데, 재귀를 통해서 전체 순열을 모두 찾게 된다면 O(N!)이라는 시간 복잡도를 가지게 되며, 해당 문제에서 N의 범위는 10,000이므로 시간 초과가 되는 것은 당연한 결과였습니다. 결국 못 풀겠어서 여러 블로그를 찾아보게 되었습니다. 그러다가 이 문제를 풀기 위한 "Next Permutation"알고..
[Java] 자료형 변환 parseInt()와 valueOf()에 대해서
·
Developer/Java
Java0. 들어가며 IDE 환경에서 코딩 테스트 문제를 풀다가, 숫자로 이루어진 문자열을 정수형으로 변환해 주는 valueOf() 메서드에 대해 IntelliJ가 경고를 띄워준 적이 있습니다. IDE가 parseInt()로 바꿀 수 있다고 추천해주더라고요..! “어? 둘 다 같은 거 아닌가?”, “어차피 int로 변환하는 건데 뭐가 다른 거지?”라는 생각이 들었습니다. 처음에는 단순 스타일 차이라고 생각했지만, 내부 구현 코드까지 살펴보니 명확한 차이가 존재한다는 것을 알게 되었습니다. 기업 코딩 테스트의 경우 대부분 프로그래머스 환경을 사용합니다. 프로그래머스에서는 IDE처럼 별도의 경고나 조언을 제공하지 않기 때문에, 이런 차이를 인지하지 못한 채 넘어가기 쉽습니다. 게다가 숫자로 이루어진 문자열을..
[Java] 우선순위 큐(Priority Queue)와 정렬(Order)
·
Developer/Java
Java0. 들어가며 코딩테스트에 있어서 파이썬 언어를 주로 활용하다가 자바로 언어를 제한하는 회사가 많아진 것 같은 느낌이 들었다.. 내 사랑 파이썬... 그도 그럴 것이 자바로 프로그래밍을 하면서 자바 언어를 활용 못한다는 것도 웃기는 일이다. 그래서 자바 언어로 코딩테스트 준비를 하던 중에 가장 헷갈렸던 부분이 바로 "우선순위 큐(Priority Queue)" 부분이었다. 그래서 우선순위 큐 정렬 부분을 확실하게 정리하려고 한다.1. 개념 정리1.1 단일 조건 자바와 파이썬에서 기본적으로 우선순위 큐를 선언하면 기본적으로 minHeap으로 설정된다. 즉, 단일 숫자 조건이라면 가장 낮은 숫자가 가장 높은 우선순위를 가진다는 의미이다. 코드를 살펴보자.import java.math.*;import j..