전체 글
-
앞선 포스트에서 살펴봤듯이 순열을 구현하기 위해 필요한 개념은 3가지이다. 1. 순서대로 나열 - 반복문을 통해 순차적으로 접근한다. 2. 중복을 허용하지 않음 - 이미 사용한 요소가 무엇인지 저장해놓는다. 이를 위해 visited라는 이름의 배열을 사용한다. 3. 재귀를 통한 접근 - 선택해야할 요소들을 하나씩 줄여가면서 자신 호출 4개의 원소를 가진 배열을 만들고 여기서 3개를 선택해서 나열하는 경우의 수를 조사해보자. private static char[] src = {'A', 'B', 'C', 'D'}; 기본적인 코드의 흐름은 다음과 같다. 코드에 대한 설명은 주석으로 대체한다. /** * 순열을 만들고 출력하는 메서드 * @param r 선택할 요소의 개수 * @param current 현재 선..
[순열]02. 순열의 구현 1앞선 포스트에서 살펴봤듯이 순열을 구현하기 위해 필요한 개념은 3가지이다. 1. 순서대로 나열 - 반복문을 통해 순차적으로 접근한다. 2. 중복을 허용하지 않음 - 이미 사용한 요소가 무엇인지 저장해놓는다. 이를 위해 visited라는 이름의 배열을 사용한다. 3. 재귀를 통한 접근 - 선택해야할 요소들을 하나씩 줄여가면서 자신 호출 4개의 원소를 가진 배열을 만들고 여기서 3개를 선택해서 나열하는 경우의 수를 조사해보자. private static char[] src = {'A', 'B', 'C', 'D'}; 기본적인 코드의 흐름은 다음과 같다. 코드에 대한 설명은 주석으로 대체한다. /** * 순열을 만들고 출력하는 메서드 * @param r 선택할 요소의 개수 * @param current 현재 선..
2022.07.10 -
순열의 정의 순열(Permutation)이란 n개의 원소에서 r개를 중복을 허용하지 않고 선택해서 순서대로 늘어놓은 것을 말하며 nPr이라고 표기한다. 순열의 전개 과정 4개의 원소 {1,2,3,4}에서 3개를 선택해서 순서대로 나열하는 방법에 대해 생각해보자. 맨 처음은 4개의 원소가 모두 올 수 있다. 그 다음은 각 경우에 대해 중복을 허용하지 않으므로 1st에서 선택되지 않은 3녀석이 각각 올 수 있다. 즉 4*3 가지가 가능하다. 여기서 1-4와 4-1은 당연히 다르다. 우리는 순서대로 나열하고 있다는 점이 중요하다.(만약 순서가 상관 없이 뽑기만 진행한다면 조합이 된다.) 동일한 절차를 거치면 우리가 원하는 순열을 얻을 수 있다. 드디어 모든 절차가 끝났고 4개의 원소에서 중복 없이 3개를 선택..
[순열]01. 순열의 개요순열의 정의 순열(Permutation)이란 n개의 원소에서 r개를 중복을 허용하지 않고 선택해서 순서대로 늘어놓은 것을 말하며 nPr이라고 표기한다. 순열의 전개 과정 4개의 원소 {1,2,3,4}에서 3개를 선택해서 순서대로 나열하는 방법에 대해 생각해보자. 맨 처음은 4개의 원소가 모두 올 수 있다. 그 다음은 각 경우에 대해 중복을 허용하지 않으므로 1st에서 선택되지 않은 3녀석이 각각 올 수 있다. 즉 4*3 가지가 가능하다. 여기서 1-4와 4-1은 당연히 다르다. 우리는 순서대로 나열하고 있다는 점이 중요하다.(만약 순서가 상관 없이 뽑기만 진행한다면 조합이 된다.) 동일한 절차를 거치면 우리가 원하는 순열을 얻을 수 있다. 드디어 모든 절차가 끝났고 4개의 원소에서 중복 없이 3개를 선택..
2022.07.10 -
1
11
2022.07.10 -
사실 APS(Algorithm Problem Solving)라고 해서 일반적인 애플리케이션 작성과 다른 특별한 코딩 방법이 있을리는 없다. 흔히 APS를 위한 코드는 속도만을 중시 하기 때문에 몇몇 알고리즘 기법을 이용해서 직선으로 내달리는 코드만을 작성한다고 생각하기 쉬운데 보기 좋은 떡이 먹기 좋은 것은 일반 애플리케이션이나 APS에서나 동일하다. 하지만 그럼에도 불구하고 짧은 시험 시간동안 깔끔한 설계를 통해서 문제를 풀기란 쉽지 않다. 그래서 객체지향적인 개념에는 부합하지 않더라도 살짝 양보하는게 좋거나, APS과정에서 유용한 코딩 방식에 대해서 알아보자. 아 먼저 필자는 Java언어를 이용하기 때문에 아래 내용들은 자바를 기준으로 작성되어있다. static member 활용 instance me..
APS를 위한 코딩 스타일사실 APS(Algorithm Problem Solving)라고 해서 일반적인 애플리케이션 작성과 다른 특별한 코딩 방법이 있을리는 없다. 흔히 APS를 위한 코드는 속도만을 중시 하기 때문에 몇몇 알고리즘 기법을 이용해서 직선으로 내달리는 코드만을 작성한다고 생각하기 쉬운데 보기 좋은 떡이 먹기 좋은 것은 일반 애플리케이션이나 APS에서나 동일하다. 하지만 그럼에도 불구하고 짧은 시험 시간동안 깔끔한 설계를 통해서 문제를 풀기란 쉽지 않다. 그래서 객체지향적인 개념에는 부합하지 않더라도 살짝 양보하는게 좋거나, APS과정에서 유용한 코딩 방식에 대해서 알아보자. 아 먼저 필자는 Java언어를 이용하기 때문에 아래 내용들은 자바를 기준으로 작성되어있다. static member 활용 instance me..
2022.07.04