본문 바로가기

알고리즘

(42)
보호필름[모의문제] 보호되어 있는 글입니다.
재귀 유용한 틀(1) import java.util.ArrayList; public class Main { public static ArrayList arrList = new ArrayList(); public static int n = 11; public static int cnt=0; public static void main(String[] args) { f(0,0); System.out.println("cnt:"+cnt); } private static void f(int depth, int y) { if(depth==n) { System.out.println(arrList.toString()); cnt+=1; return; } else if(y==12){return;} arrList.add(y); f(depth+1,..
수영장 오답노트 1] 3달이용권에 대한 생각을 잘못해, 설계도 잘못했다. 1월 7월 8월 이렇게 구매권을 사용할 수 있을 줄 알았는데, 그게 아니었다. 그래서 처음에 설계할땐, 0인거는 제외하고 배열을 백트래킹을 이용해 생성하는 방식을 택했는데, 나중에 잘못되었음을 알았다. 문제를 제대로 이해한 후에는 12달 모두 구매권을 사는 방식을 택했다. 0인 것은 어차피 계산하는 부분에서 제외시키면 되니까... 그런데 여기서 3달짜리 계산을 할 때 많이 고통스러웠다. 구현 기초가 부족함을 뼈저리게 느꼈다. package swexpertmoitest; import java.util.Scanner; public class 수영장 { public static int t,dayPrice,monthPrice,threeMonthP..
대표값 오답노트 최빈값 세는 부분 -> 잘못 설계함. 최빈값 세는 부분 설계 너무 대충함.시간안에 끝내려고...이러면 안된다. import java.util.Scanner; public class Main{ // 평균, 최빈값 구하는 문제 // 최빈값 둘 이상인 경우 앞에거 출력 // 열개 주어짐, 배열 열개짜리 // a[20] // v[1010] // sum // for(i 1~=10) a 입력 // sum+=a[i] // v[i]+=1; (1) ====> v[a[i]]+=1 로 설계했어야 // avg = sum/10; // cnt=0;idx=1; // for(i 1~=1000) // v[i]>cnt{idx=i} //idx 최빈값 public static int[] a = new int[20]; public ..
미로 탐색 dfs-> 오답, (반례 찾아야됨) import java.util.Scanner; import java.util.Queue; import java.util.LinkedList; /** * N×M크기의 배열로 표현되는 미로가 있다. * 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. * 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다. 위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다. * [입력] * 첫째 줄에 두 정수 N, M(2 ..
유기농 배추 import java.util.ArrayList; import java.util.Scanner; public class Main { /** * 입력 *1]테스트케이스 *2]가로,세로 입력 (1~50) 배추가 심어져있는 위치 개수(1~2500) *다음 K줄에는 배추의 위치 X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1) *dfs 가 호출되는 갯수를 세자 * * 설계 * [1] 테스트케이스 입력 * [2] garo,sero * [3] a[sero][garo] 선언, v[sero][garo] dx[],dy[] * [4] k 배추 개수 17 * [5] for(0~k) * a[x][y]=1; * * for(i 0~sero) * for(j 0~garo) * 만약 v[i][j]=f 이고 a[i][j]=1이면 ..
중복없는구간 import java.util.Scanner; import java.util.ArrayList; public class Main{ public static int n; public static int[] arr; public static int[] v; public static void main(String[] args){ Scanner scan = new Scanner(System.in); n = scan.nextInt(); arr = new int[n+1]; v = new int[n+1]; for(int i=1;i
직사각형배치경우의수 dp문제 2*n 직사각형을 채우는 경우의 수는 끝에 타일이 '|' 인 경우와 '='인 경우 두가지 경우수를 합하는 것과 같다. import java.util.Scanner; public class Main{ // 입력 1~100(n) // 출력 가능한 경우를 1000007로 나눈 나머지 // 이해: 2*n 사각형을 2*n으로 채우는 것 public static int[] arr = new int[120]; public static void main(String[] args){ arr[2]=2; arr[3]=3; Scanner scan = new Scanner(System.in); int n = scan.nextInt(); if(n==1){System.out.println(1);return;} if(n==..