목록알고리즘 17
재밌고 어려운 IT를 이해해보자~!
스택을 인덱스로 활용할 발상의 전환이 필요하다. 배열을 순회하면서 현재 원소가 이전의 원소보다 작을 때 까지 배열의 index를 stack에 push 한다.그리고 만약 현재 원소가 스택의 top 원소를 인덱스로 하는 수열의 원소보다 크게 될 경우 stack의 원소를 pop하면서 해당 인덱스에 해당하는 원소들을 현재 원소로 바꿔주는 것이다. 3 5 2 7 Stack[0] [3,5,2,7] 3스택이 빌때까지 반복arr[stack.pop()]) = arr[i]=> arr[0] = arr[1][5,5,2,7]stack empty상태 5>2Stack [1,2] 2스택이 빌때까지 반복arr[stack.pop()] = arr[i]=> arr[2] = arr[3][5,5,7,7]Stack[1] =..
스택을 활용하되 해당 타워의 인덱스를 저장할 자료구조를 활용해야한다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Stack;import java.util.StringTokenizer;public class Main { static class Top { int idx; int height; Top(int idx, int height) { this.idx = idx; this.height = height; } } public static ..
빌딩을 순차적으로 세워놨다고 가정하면 80,000 ~ 1 까지 총합을 구해야하고 그 값은 32억을 넘어간다.따라서 int가 아닌 long 선언!import java.util.*;import java.lang.*;import java.io.*;// The main method must be in a class named "Main".class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = scan.nextInt(); long cnt=0; int[] height = new int[num]; for (int i=0; ..
소유주가 A~Z까지 다른 땅에서 같은 소유주로 이루어진 'ㄷ' 모양 (모양의 방향은 상관없음) 땅을 찾는 알고리즘을 알아보자..! 방향에 상관없이 'ㄷ'자인지 확인하는 과정을 생각해내는게 쉽지않다.. public class DShapeFinder { public static void main(String[] args) { String[] land1 = {"AAA", "AAA", "AAA"}; String[] land2 = {"BAA", "ABB", "ABB", "AAA"}; String[] land3 = {"BAAAD", "AAAAA", "ABBAA", "AAAAA"}; System.out.println(findMaxDArea(land1)); //..
10*10의정사각형에 4*2직사각형, 2*2 정사각형, 4*4 정사각형을 무한하게 사용해서 꽉 채우는 경우의수 코딩테스트에서 정해진규격의 도형들로 빈공간을 채우는 경우의 수를 구하는 문제가 나왔다!재귀함수를 많이 사용해본 경험이 없어서 알기가 쉽지 않았다.. 프로그램의 실행 과정 요약10x10 보드의 맨 위 왼쪽(좌표 0,0)에서 시작하여 타일을 놓을 수 있는지 확인타일을 놓을 수 있으면 해당 영역을 타일로 채우고, 그다음 칸으로 재귀적으로 이동보드가 다 채워지면 경우의 수를 1 증가시키고, 타일을 다시 제거하여 다음 가능한 배치를 탐색이 과정을 통해 가능한 모든 타일 배치 경우의 수를 구한다.여기서 중요하게 봐야할 코드는 fill과 countWays함수이다.좌표 (0,0)에서 시작해 하나의 타일을 채우..
찍신찾기[JAVA]※문제이해{key:value,key:value}2 개의 map 을 포함한 요소로 이루어진 배열 arr이 정답지로 넘어갈때,가장 점수가 높은 사람의 이름과 점수를"이름:정수"형태로 return시험 응시자는1 번으로 모두찍은 a3 번으로 모두 찍은 b5 번으로 모두 찍은 c총 세명※로직정리입력 문자열에 대해서 정규표현식을 사용해 숫자만 배열에 대입해당 배열을 순회하며 정답이 맞으면 해당 번호를 찍은 응시자 점수 증가응시자 점수중 최대값을 찾아 해당 점수를 받은 응시자의 이름과 점수를“이름:점수”형태로 출력※코드[JAVA]import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner s..
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int T = Integer.parseInt(br.readLine()); int[][] arr = new int[15][15]; long n1 = 0;..
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int[][] arr = new int[30][30]; for (int i = 0; i