본문 바로가기
반응형

Algorithm17

LeetCode - Roman to Integer 문제 링크 : https://leetcode.com/problems/roman-to-integer/ 난이도 : Easy 문제 풀이 : Symbol에 대하여 정해진 값이 있다. 그리고 이 Symbol들을 조합하여 숫자를 표현한다. 이 때, 어떤 Symbol 두 개의 조합은 특정한 숫자를 나타낸다는 조건이 있다. IV(4), IX(9), XL(40), XC(90), CD(400), CM(900) 에 해당한다. 어떤 Symbol에 해당하는 값을 매핑시켜야 하고 조합이 몇 개 되지 않으므로 HashMap 자료구조를 사용하여 이 조합들의 값을 매핑시킨다. 그리고 주어진 문자열을 순회하면서 조합에 해당하는 값을 더해준다. 소스 코드 : class RomanToInteger { companion object { va.. 2020. 6. 27.
LeetCode - Reverse Integer 문제 링크 : https://leetcode.com/problems/reverse-integer/ 난이도 : Easy 문제 풀이 : 주어진 숫자를 거꾸로 뒤집는 문제이다. 10으로 나눈 나머지를 계속하여 자릿수를 만들면서 더해주면 뒤집을 수 있다. 다만 주의할 점은 32-bit signed integer를 사용한다는 부분이다. 이 Integer의 범위를 넘어간 값은 0을 반환해야 한다. 그래서 결과값이 이 범위를 넘어가는지 안넘어가는지 체크하기 위해 Long 자료형을 사용해야 한다. 소스 코드 : class ReverseInteger { fun reverse(x: Int): Int { var answer: Long = 0 var num = x while(num != 0) { answer = answer .. 2020. 6. 27.
LeetCode - Two Sum 문제 링크 : https://leetcode.com/problems/two-sum/ 난이도 : Easy 문제 풀이 : nums 배열에서 target을 만들 수 있는 두 개의 숫자 조합을 찾아 인덱스를 IntArray로 반환하는 문제이다. 두 숫자를 각각 A, B라 하고 두 숫자를 합쳤을 때 나오는 값을 C라고 하자. 그럼 A+B=C 이다. A를 선택했을 때, C를 만들 수 있는 숫자 B는 C-A로 구할 수 있다. 그렇다면, A를 선택했을 때 나머지 숫자들 중 B가 존재하는지 여부를 알고 그 B의 위치를 알면 답을 구할 수 있다. 두 개의 for-loop을 사용하여 풀 수 있지만, 시간복잡도를 낮추기 위해 HashMap 자료구조를 사용한다. HashMap의 Key에 숫자를, Value에 그 숫자의 위치를 .. 2020. 6. 27.
[프로그래머스] 코딩테스트 고득점 Kit > 쇠막대기 # 문제 # 문제 접근 문제만 봤을 때 굉장히 복잡할 것 같다고 느낀 문제였다. 우선 괄호로 이루어진 입력이 보기가 쉽지 않았다. 중요한 것은 "()" 모양으로 된 것은 레이저 라는 것이다. 그래서 ()를 레이저(R)로 표시한 후 생각하였다. 예시의 입력은 R(((RR)(R)R))(R) 로 바뀌게 된다. 막대기가 하나 완성이 되기 위해선 "(" 과 ")" 가 필요하다. 괄호 쌍을 맞추는 알고리즘 문제를 풀어 본 적이 있는가? 이와 유사하다. 스택에 "("를 만나면 쌓고, ")"를 만나면 스택으로 부터 pop 하여 쌍을 맞추게 되는 것이다. 그럼 R을 만났을 땐 어떻게 할 것인가? "("가 스택에 쌓였다는 것은 막대기가 하나 생성되었다는 것을 의미한다. "("가 N개 스택에 쌓였다는 것은 막대기가 N개 생.. 2020. 3. 18.