본문 바로가기

분류 전체보기

(229)
순열 (Permutation) SW 역량테스트문제를 풀면서, 완전 탐색 (브루트포스) 문제를 해결할 때 필수적인 개념인 순열에 대해서 정리하려고 합니다. 브루트포스 문제를 만나면 단순 반복문을 통해 탐색하는 문제가 아닌, 재귀와 백트래킹을 통한 순열 또는 조합이 엮인 문제가 많은 것 같습니다. 그래서 순열과 조합에 대한 부분은 반드시 완벽하게 이해하고 문제를 풀어야 합니다. 그림만 통해서 저는 이해하기 어려웠기 때문에 문제와 그림을 통해서 정리해보겠습니다. 순열이란 몇 개를 골라 순서를 고려해 나열한 경우의 수를 말합니다. 즉, 서로 다른 n 개 중 r 개를 골라 순서를 정해 나열하는 가짓수이며 순열이라는 의미의 영어 ‘Permutation’의 첫 글자 P를 따서 nPr로 표시하기도 합니다. [네이버 지식백과] 순열 [Permutat..
[14889] 스타트와 링크 이것도 SW 역량테스트 문제중에 쉬운편에 속하는 브루트 포스문제라고 생각합니다..... 이번에는 정답을 안보고 풀긴 했는데, 너무 조잡하게 푼 것 같습니다...ㅋ 이 문제도 입력 N이 20이하이기 때문에 N/2 명의 사람들이 팀을 이룰 수 있는 모든 경우를 출력해서 스타트팀과 링크팀의 능력치를 빼서 절댓값으로 최솟값을 구했습니다. [6603] 로또 https://daily-life-of-bsh.tistory.com/58 문제의 코드를 참고하면 어렵지 않게 풀 수 있는 문제였습니다. 1. 저는 팀의 member 의 번호를 list 라는 배열에 저장 했습니다. 처음에 보면 list[0] ~ list[N-1] 까지 숫자 1부터 N 까지 넣는데, N명의 사람의 번호를 list 에 저장한 것입니..
[14502] 연구소 그나마 역량테스트 기출문제 중에 쉬운편에 속하는 문제인데, 저는 너무 어려워서 https://whereisusb.tistory.com/219 블로그를 참고하여 풀었습니다. 아직 실력이 한참 부족한 것 같습니다............................ 처음에 문제를 읽고 어떻게 3개의 벽을 배치할까 생각했는데, 2를 주변으로 BFS를 해서 1과 만나는 부분에 벽을 배치하려고 했습니다. 하지만 3번째 예제를 보면 1이 없는 상황도 있기 때문에, 한참 문제만 보다가 블로그를 참고해서 힌트를 얻었습니다. 문제를 꼼꼼하게 읽는 것이 정말 중요하다고 생각했습니다............ 입력의 범위를 보면 N과 M 둘다 8보다 작기 때문에 매우 작습니다. N과 M이 8로 가장 클 때를 살펴보아도 64개중에 3..
[9935] 문자열 폭발 import java.util.Scanner; // 9935 문자열 폭발 public class Main { static char[] stack; static String first, second; static int top=0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); first = sc.next(); second = sc.next(); char[] f = first.toCharArray(); char[] s = second.toCharArray(); char last = s[s.length - 1]; stack = new char[f.length]; Outter: for (int i = 0; i < f...
[5430] AC import java.util.*; // 5430 AC public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); Outter: for (int i = 0; i < num; i++) { Deque deque = new ArrayDeque(); String s = sc.next(); int b = sc.nextInt(); String arr = sc.next(); int dir = 0; arr = arr.substring(1, arr.length() - 1); StringTokenizer st = new StringTokenizer(arr, ",")..
[1182] 부분수열의 합 import java.util.Scanner; // 1182 부분수열의 합 public class Main { static int dep; static int N, S, sum, cnt; static int [] arr, ans; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); S = sc.nextInt(); arr = new int[N]; ans = new int[N]; for(int i=0; i
[2206] 벽 부수고 이동하기 import java.util.Scanner; import java.util.Queue; import java.util.LinkedList; // 2206 벽 부수고 이동하기 public class Main { static int N, M, cnt; static int[][] map; static boolean visited[][][]; static Queue queue; static int[][] temp = { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } }; static boolean flag; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); M =..
[6603] 로또 import java.util.Scanner; // 6603 로또 public class Main { static int [] arr; static int N; static int [] ans; public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); while(true) { N = sc.nextInt(); if(N == 0) break; arr = new int[N]; ans = new int[N]; for(int i=0; i