목록Data Structure & Algorithm/PS - JAVA (270)
Dev.baelanche
별찍기 문제집은 다 풀었는데 다른 별찍기를 찾았다 ㅋㅋ n에 따른 배열의 크기를 보면 2^n * 2^n 이다. 별은 가로, 세로 둘다 절반만큼의 크기로 왼쪽 위, 오른쪽 위, 왼쪽 아래 3군데에 똑같은 모양으로 그려져 있다. 가로, 세로 길이를 2배로 늘려가며 패턴을 3군데에 똑같이 그려주면 된다. public class Main { static char a[][]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int l = (int)Math.pow(2, n); a = new char[l][l]; for(int i=0; i
가로, 세로의 움직임을 따로 생각해보자. 가로로는 오른쪽, 왼쪽 순으로 움직이며 w*2 만큼의 시간이 경과하면 제자리로 돌아온다. 세로로도 마찬가지며 방향만 위, 아래 순이다. 시간 t 를 w*2 로 나눈 나머지만큼만 더 움직여주면 된다. 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 w = Integer.parseInt(st.nextToken()); int h = I..
육지중에 가장 멀면서 빠른 길을 찾으라는 문제이다. 문맥이 참;; 배열 크기가 50*50이니 육지인 인덱스마다 BFS를 해주며 완전탐색하면 된다. public class Main { static int n; static int m; static int a[][]; static boolean visited[][]; static int dx[] = {-1, 0, 0, 1}; static int dy[] = {0, -1, 1, 0}; static int max = 0; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Stri..
알고리즘 문제에서 시계, 달력 문제는 참 단골 문제같다. 시, 분, 초가 각각 24, 60, 60 미만으로 되게 만들어주면 된다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); int d = sc.nextInt(); c += d; b += c/60; c %= 60; a += b/60; b %= 60; a %= 24; System.out.println(a + " " + b + " " + c); } }
뭔가 문제 설명이 불친절한 느낌이다. 가로, 세로 방향으로 탐색하며 1x2 크기 이상의 공간이 있다면 카운트한다. 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()); int a[][] = new int[n][n]; for(int i=0; i
작년에 카카오 모의테스트에서 이와 똑같은 문제가 나온적이 있었다. 당시에 dp 문제를 하나도 풀 줄 몰랐는데 신기하게도 이건 술술 풀렸다;; 1. 입력받은 대로 2차원 배열을 채운다. 2. 정사각형의 조건을 만족하려면 가로, 세로의 길이가 같고 인접한 배열을 모두 1이어야 하므로 좌측 위, 좌측, 위의 값이 모두 1 이상이어야 한다. 3. 메모이제이션 기법으로 큰 정사각형의 크기를 누적시키며 진행한다. a[i][j] = min(a[i-1][j-1], a[i-1][j], a[i][j-1]) + 1; 2번을 풀어쓰면 위 식과 같겠다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = ..
점의 개수가 9, 25, 81 ... 순으로 늘어난다. 위 수는 1 + (2^1), 1 + (2^2), 1 + (2^3) 으로 바꿔줄 수 있다. 따라서 1 + (2^n) 이 점의 개수이다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); long dot = 1 + (long)Math.pow(2, n); System.out.println(dot * dot); } }
토너머트 참가 인원, 김지민의 번호, 임한수의 번호를 매 반복마다 반으로 줄여준다. 홀수 일때는 +1을 해줘야한다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a = sc.nextInt(); int b = sc.nextInt(); int i; boolean m = false; for(i=1; n>=2; i++) { int arr[] = new int[n+1]; arr[a] = 1; arr[b] = 1; for(int start=1; start