ProgramSoliving (197) 썸네일형 리스트형 SW아카데미 : 숫자게임 문제를 읽어보면 어떤숫자를 2~ n개로 나누엇을때 곱을 무한 반복하면서 가장 오랫동안 나눌 수 있는 경우는 최대 몇번인지 구하는 방법이다. 처음에는 BFS로 접근해서 Queue가 터지는 경우가 생긴다. 그경우는 num 이라는 숫자를 a*b = c 라고 한다면 어느 가지에서 c의 중복이 몇번 일어날 수있다. 따라서 각각의 가지를 hashMap으로 기억해놧다가 알고 있는 값이라면 빠르게 반환하는게 중요하다. 그리고 비트마스크를 이용해서 어떤숫자를 조각 할수있다. 숫자의 길이가 len =4 라고한다면 0000 // 아무것도 짜르지 않는경우 -> 이경우는 필요없으니 무시한다 0001 // 첫번째에 짜르는경우 ex 1234 를 1 234 로 나누는 경우다. 0101// 첫번째 3번째를 짜르는경우 1 23 4 로 .. 백준 : 13459 https://www.acmicpc.net/problem/13459 13459번: 구슬 탈출 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 쉬운문제 였는데 실수 했던게.. boolean형 함수를 사용해서 파란공이 실패하면 return false를 한다는 것이다. 이게 당연한 건줄 알았지만 생각해보면 그방햐으로 실패해도 다른방향은 성공할수있으니 return false를 날리면안된다. 따리서 coninue로 처리해주어서 AC를 받았다. package 삼성; import java.io.Buff.. 백준 : 3678 카탄의 개척자 빡구현 시뮬 배열을 어떻게 활용할까가 중요하다. 이런순으로 좌표를 정한다음 이동하는 순서도 시계방향이란것을 알수있다. 이동하는 순서를 시계방향으로가는데 만약 그좌표에 이미 자원이잇을경우 이저 방향으로 한번 더 가는것을 구현하면된다. import java.util.Arrays; import java.util.Scanner; public class 카탄의개척자 { static int T; static int N; static int map[][] = new int[2001][2001]; static final int stand = 1000; static int res[] = new int[6]; public static void main(String[] args) { // Init Init(); Scanne.. 백준 : 1091 주어진 순열 S를 사이클로 분해하면, 이 순열의 주기는 각 사이클의 길이의 최소공배수와 같습니다. 따라서 N≤48에서 나올 수 있는 가장 큰 주기는 사이클의 길이가 3,5,7,8,11,13일 때 120,120 입니다. 시뮬레이션 문제인데 구현은 그렇게 어렵지않다 P 와 S를 이용해서 카드를 셀럭트하고 조건에 맞는 카드가 나오면 for문을 빠져나오면된다. arrayList를 쓰는것보다 boolean 값을 48(카드의 최대수)를 지정하면 빠르게 확인이 가능하다. 중요한점은 카드를 썩는것이 어느정도를 썩으면 다시 원래의 형태를 오게하는지 그것이 문제다. 처음시작 0 1 2 3 4 5 의 카드가 오면 종료시키는 방법도있고 100만번 아래에서는 어쨋든 하나의 루프를 돈다. 따라서 for문을 100만번 설정해주고 .. 백준 : 1443 망가진 시계 https://www.acmicpc.net/problem/1443 1443번: 망가진 계산기 첫째 줄에 다솜이의 계산기가 표시할 수 있는 자리수 D와 다솜이가 하려고하는 연산의 수 P가 주어진다. D는 2보다 크거나 같고, 8보다 작거나 같은 자연수이고, P는 30보다 작거나 같은 음이아닌 � www.acmicpc.net Solved 난이도에 비해서 시웠던 문제. 중간에 적절히 가지치기를 해주면서 경우의 수를 구하면된다. 30번 곱할때 수들을 뽑을수 있는 경우의수를 생각하자. 이때 8*8*2 == 2*8*8 는 같기때문에 수들을 내림차순으로 정렬한다고 생각하면 편할것이다. import java.util.Scanner; public class 망가진계산기 { static long N, P; static l.. 백준 : 1360 되돌리기 https://www.acmicpc.net/problem/1360 1360번: 되돌리기 첫째 줄에 명령의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 명령과 수행한 시간이 주어진다. 항상 시간이 오름차순으로 주어지고, type c에서 c는 알파벳 소문자, undo t에서 t는 1보다 크거나 같�� www.acmicpc.net 처음에는 구현이 까다로워 보인다. undo에 undo에 undo를 어떻게 계산해야할지가 햇갈린다. 하지만 제일 마지막에 실행하는 undo를 기준으로 생각해본다면 명령어를 실행하지 않을 것들을 채택할수 있다. 마지막 undo부터 차례대로 그범위안의 명령어들을 비활성화 시켜나가면 최종적으로는 undo를 제외한 type만 남는다. 그리고 이것이 정답이 된다. import java.io... 백준 : 1022 메모리초과를 해결하는 아이디어를 얻지못해서 한참 해맸던 문제이다. 이때 문제에 힌트에서는 r1~r2 c1~c2 범위가 200을 넘지않는다. 따라서 y,x 를 조작하면서 범위안에 들어왓을 때 배열에 저장해주면된다. 문제를 풀면서 한참해맨게 있는데 절대값이 5000이라는 힌트를보고 10000*10000 의 카운트 개수가 한계라고 생각하고 while(1억일때 브레이크)를 해주어서 틀리게 되었다. package algo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class B1022 { static int dy[] .. 백준 : 2252 DFS ,BFS 줄세이구 풀이방버은 DFS 접근과 BFS 접근이 있다. 1. DFS 풀이방법 보기에서 주어지는 순서는 그래프를 나타낸다 필드상에 여러그래프들을 DFS 탐색하고 종료되는 순서 stack에 저장한다. Stack 에 pop하는 순서대로 위상정렬된 순서이다. 2. BFS 풀이방법. u->v 로간다면 v의 카운터를 1증가시킨다. 이렇게보면 현재 줄을 세울수 있는 사람은 cnt = 0인 사람이다. 이원리로 BFS탐색을한다면 위상정렬이 이루어 진다. DFS 코드 package 백준; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.. 이전 1 ··· 10 11 12 13 14 15 16 ··· 25 다음