Adding Reversed Numbers
이번 포스팅 문제는 3486번 문제입니다. 이 문제는 탐욕 알고리즘(Greedy Algorithm) 문제인데 이 알고리즘 관점에서 문제를 풀어보기 위해
신경을 많이 썼습니다.
그리디 알고리즘이란 각 부분적인 상황에서 최적의 해를 선택해나가면서 최종적인 해를 구하는 방법인데 이 결과가 항상 전체 상황의 최적의 해는
아닐 수 있다는 점을 주의해야 합니다.
그럼 문제를 풀어보도록 하겠습니다 .
조건
2개의 정수가 주어지고 각 정수를 역순으로 나열(123일 경우 -> 321)한 후 덧셈을 하고 그 덧셈 결과를 다시 역순으로 나열하여 출력하는 문제입니다.
풀이전략
01. 각 정수를 역순으로 변환
02. 변환된 정수를 덧셈
03. 덧셈 결과를 역순으로 변환
구현하기
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 29 30 31 32 33 34 35 36 37 38 39 | package BackJoon.그리디; import java.util.Scanner; /** * https://www.acmicpc.net/problem/3486 * @author troh * * INPUT: N case, 2개의 정수 * OUTPUT: 입력된 각 정수의 역순의 합을 역순 */ public class _01_AddingReversedNumbers { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int testCase = sc.nextInt(); for(int i=0; i<testCase; i++) { int num1 = sc.nextInt(); int num2 = sc.nextInt(); int result = getSolution(num1, num2); System.out.println(result); } } private static int getSolution(int num1, int num2) { num1 = reverse(num1); num2 = reverse(num2); return reverse(num1+ num2); } private static int reverse(int num) { int reverseNum = 0; while(num/10 != 0) { reverseNum = reverseNum*10 + num % 10; num /= 10; } reverseNum = reverseNum*10 + num % 10; return reverseNum; } } | cs |
배운점..
그리디 알고리즘으로 문제에 접근한다에 대해 고민을 많이 할 수 있었고 사전적 정의를 실제 문제에 적용하는게 쉽지 않았습니다.
개인적인 생각의 그리디 알고리즘 접근 방법은 "각 단계" 와 "최적의 해"를 정의할 수 있어야 한다고 생각합니다. 제가 구현한 코드에서는
"각 단계" 란 "정수 역변환, 덧셈, 결과 역변환"이고 "최적의 해"란 변환하는 알고리즘 이였던 것 같습니다.
문제가 어려웠던건 아니지만 그리디알고리즘 개념이 잘 잡히지 않네요.. 이상입니다
'알고리즘 > BackJoon' 카테고리의 다른 글
[백준 온라인저지]영화감독숌 - 브루트포스(5) (0) | 2019.09.06 |
---|---|
[백준 온라인저지]체스판 다시 칠하기 - 브루트포스(4) (0) | 2019.09.04 |
[백준 온라인저지]덩치 - 브루트포스(3) (0) | 2019.09.03 |
[백준 온라인저지]분해합 - 브루트포스(2) (0) | 2019.09.01 |
[백준 온라인저지]블랙잭 - 브루트포스(1) (0) | 2019.09.01 |