알고리즘 4

백준 2580: 스도쿠 문제해결 (C++)

이 문제는 빈칸마다 1-9까지 넣어보되, 불필요하다고 생각되는 숫자는 넣지않는 백트랙킹 방식으로 푸는 문제였다. N-Queen문제와 유사했던 것이다. 2차원 배열의 갯수만큼 재귀를 수행하면서 다음과 같은 방식으로 재귀를 수행한다. 0을 만난 경우 1-9까지의 수 중에 후보가 될수있는 수들을 하나씩 넣어보고 0이 아닌 수를 만난 경우 그냥 재귀를 수행한다. 이미 배열에 수가 채워진 경우 가능한 수라는 것이 없다(값이 이미 있으므로). 이때 가능한 수를 찾는 방법은 다음과 같다. 가로열에 이미 존재하는 숫자 제외 세로열에 이미 존재하는 숫자 제외 3*3박스 안에 이미 존재하는 수는 제외 이런 숫자들을 제외하고 남은 숫자들만 하나씩 넣어보는 것이다. 바닥 조건은 9*9배열을 모두 탐색한 경우로 한다. 즉, 배..

2020-0819 "백준 2580번: 스도쿠"를 풀며

알고리즘 문제를 해결한다는건 정말 생각보다 쉽지 않은 일이다. 내가 선택한 방법이 완전히 틀린 방법이어서 처음부터 다시 시작해야 할 때도 있다. 알고리즘은 내가 예상했던것 보다 수학적 사고력을 많이 요하는 분야인것 같다. 수학적 사고력이란 뭘까? 어릴적에는 단순히 재능이라고 생각했다. 수능 문제를 30분만에 두번이나 풀고 자는 친구들을 보면서 많이 좌절했던것 같다. 그치만 지금은 수학적 사고력이란 체력과 인내심, 그리고 나에 대한 관용이라고 생각한다. 솔직히 어릴적에는 나는 안된다는 생각에 사로잡혀있기도 했고, 문제가 안풀렸을때 그 좌절감을 견디지 못했다. 그래서 결국 풀이방법을 많이 외우다시피하면서 억지로 억지로 공부했었다. 지금의 나는 드디어 내가 공부하고자 하는 분야를 만났고, 나의 전공을 정말 사..

프로그래머스 1단계 해설: 정수의 정렬

문제: 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한 조건 : n은 1이상 8000000000 이하인 자연수입니다. 해답코드 class Solution { public long solution(long n) { long answer = 0; int length = (int)(Math.log10(n) + 1); long[] arr = new long[length]; for(int i = 0; i < length ; i++){ arr[i] = n%10; n /= 10; } for(int i = 0; i < arr.length ; i++) for(int k=..

Java 2019.07.23

프로그래머스 1단계 해설: 자연수의 각 자리수의 합 구하기

문제: 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한사항 :N의 범위 : 100,000,000 이하의 자연수 해답 import java.util.*; public class Solution { public int solution(int n) { int answer = 0; while(n !=0) { answer += n%10 ; n /= 10; } return answer; } } 코드 설명: n: 나뉘어질 자연수, answer: 각 자리 수들의 합 자연수 n을 10으로 나눈 나머지를 answer에 더하는 방식 while문 안에서 n이 0이 되기 전까지 n을..

Java 2019.07.23
반응형