목록Data Structure & Algorithm/PS - JAVA (270)
Dev.baelanche
너무 쉬운 dp문제이긴 한데, dp문제는 모두 포스팅하기로 정해서 올린다. 문제에 써있는대로 탑다운 방식으로 풀었다. n, m에서 왼쪽, 왼쪽위, 위 방향으로 이동하면서 1, 1에 도착했을때의 개수를 더해주었다. public class Main { static long dp[][]; public static long dp(int n, int m) { if(n == 0 || m == 0) return 0; if(n == 1 && m == 1) return 1; if(dp[n][m] != -1) return dp[n][m]; long result = (dp(n, m-1) + dp(n-1, m) + dp(n-1, m-1))%1000000007; dp[n][m] = result; return result; } ..
카드에 들어갈 수 있는 숫자의 범위가 너무나도 커서 배열로 만들기엔 부적합하다. Map을 만들어서 key에 카드의 값, value에 카드의 개수를 저장해서 정렬하는 방법으로 풀었다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); Map map = new HashMap(); for(int i=0; i o2.getValue()) return -1; else { if(o1.getKey() < o2.getKey()) ..
정렬만 꼼꼼하게 해주면 된다. 딱봐도 알겠지만 내가 쓴 코드는 상당히 별로다...ㅋㅋ;; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Student s[] = new Student[n]; for(int i=0; i o2.korean) return -1; else { if(o1.english o2.english) return 1; else { if(o1.math o2.math) return..
Comparator를 구현하여 정렬해주었다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Member m[] = new Member[n]; for(int i=0; i
달팽이배열로 푼 사람들이 많다는데 그게 뭔진 모르겠고 난 그냥 인덱스 계산해서 풀었다. 배열과 좌석 배치 좌표의 세로방향이 반대이기 때문에 유의하자. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; st = new StringTokenizer(br.readLine()); int c = Integer.parseInt(st.nextToken()); int r = Integer.parseInt(st.nextToken()); int k = Integer.p..
정~~~~말 간만에 스위치로 구현한 문제라서 업로드했다. 기본 문자열 다루는 문제라서 따로 설명할건 없고 소스코드를 보면 될 것 같다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); char c[][] = new char[n][n]; for(int i=0; i
명령어의 수가 최대 1000이므로 2000*2000의 배열공간만 있으면 모든 경우를 저장할 수 있다. 한번이라도 가본 좌표를 체크해주기만 하면 된다. public class Main { static int l; static char c[]; static boolean visited[][] = new boolean[2001][2001]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); l = sc.nextInt(); c = sc.next().toCharArray(); dfs(1000, 1000, 0); int cnt = 0; for(int i=0; i
N, M 이 최대 10으로 충분히 작기 때문에 완전탐색으로 문제를 풀 수 있다. 백트래킹으로 모든 경우를 되집어보며 구해주었다. public class Main { static int n; static int m; static int a[][]; static boolean visited[]; static int min = Integer.MAX_VALUE; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); a = new int[11][11]; visited = new boolean[11]; for(int i=1; i0) { a[i][sc.nextInt()..