본문 바로가기

algorithm68

[JAVA] 지형이동 - 프로그래머스 이때까지 배운 알고리즘들을 정리하기 딱 좋은 문제. 난이도가 4인 이유는 아마 구현해야할 양이 많아서 인듯 하다. 1. BFS or DFS 로 그룹 나누기 만약 height 가 3일 때 land가 아래와 같다면 land[3][3] 1 1 13 5 1 12 7 6 11 원하는 결과인 group[3][3] 는 아래와 같다. group의 각 원소는 그룹 번호를 의미한다. 2. 인접리스트 생성하기 인접행렬로 할시 아래 처럼 메모리 초과난다. 인접 리스트의 결과물은 아래처럼 될것이다. 3. 거리가 작은 순으로 정렬하기 새로운 리스트와 클래스를 만들어서 정렬한다. gn 은 다음 그룹번호다. list 는 인접리스트를 말한다. Node 라는 클래스 인데 Node 는 원소로 a,b,d를 가진다. 즉, 그룹번호 a와 그룹.. 2020. 9. 26.
[JAVA] 백준 가르침 1062 www.acmicpc.net/problem/1062 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net 비트마스크를 이용해 풀어봤다. 중요한 점은 영어단어를 굳이 String 이나 char[] 로 표현하지 않아도 된다는 점이다. 예를 들어 "apple" 이라는 단어가 있다고 할 때 여기서 'a','p','l','e' 4가지의 알파벳을 사용했다는 것이 중요하다. 따라서 "apple" 이나 "apppple" 이나 "aaaaaple" 이나 모두 'a','p','l','e' 4가지의 알파벳을 사용했다. 이를 유용.. 2020. 9. 24.
[JAVA] 백준 스도미노쿠 4574 www.acmicpc.net/problem/4574 4574번: 스도미노쿠 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 채워져 있는 도미노의 개수 N이 주어진다. (10 ≤ N ≤ 35) 다음 N개 줄에는 도미노 하나를 나타내는 U LU V LV가 �� www.acmicpc.net 1. 스도쿠에서 방문 체크하기 9*9 스도쿠에서 임의의 점 (x,y) 에 숫자 num을 넣을 수 있는지 없는지 어떻게 판단할까?? 처음 생각했던 건 x행에 num이 존재하는지 검사하고 y열에 num이 존재하는지 검사하고 마지막으로 9*9 를 3*3 으로 나눈 각각의 박스에서 num이 존재하는지 확인하는 것이다. 별로 좋지 못한 방법이다. 더 좋은 방법이 있다. 0행에 8이 존재하는가? 이 .. 2020. 9. 24.
[JAVA] 백준 -부분 수열의 합 14225 www.acmicpc.net/problem/14225 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 � www.acmicpc.net 부분 수열이 처음엔 연속된 수의 나열인 줄 알고 풀었다가 아니였다. 원래 수열이 [1,4,3,2,3,1] 와 같이 있다면 [1], [1,3,2],[1,4,3],... 처럼 1개 이상의 원래의 순서를 유지한 수열을 부분 수열이라고 한다. 이러한 정의를 문제에 알려주면 좋았다만.. 여튼 문제는 어렵지 않으나 문제는 방문 체크이다. 방문 체크를 .. 2020. 9. 22.
[JAVA] 백준 - 스타트와 링크 14889 www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net onejunu.tistory.com/63?category=882329 [JAVA] 비트 연산자를 이용하여 조합 & 부분집합 & 부분집합 여부파악 아래 배열을 계속 쓸 것이다. int[] arr = new int[]{1,2,3}; # 부분 집합 구하기 코드 생각 없이 그냥 부분 집합을 구한다고 하면 어떻게 구할까?? 1 2 3 1,2 1,3 2,3 1,2,3 그렇다면 비트 마스크로 한다면 아래. onejunu.tistory.com 비.. 2020. 9. 21.
[JAVA] 백준- 연산자 끼워 넣기 14888 www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, �� www.acmicpc.net 중복된 연산자에 대해서 따로 처리를 해야하는가 생각했는데, 중복계산해도 경우의 수가 10! 밖에 안되서 전체 순열 탐색으로 돌렸더니 통과되었다. import java.util.Scanner; class Main{ static int n; static int[] nums; static int[] operators; static int max = -987.. 2020. 9. 21.
[JAVA] 백준 1399 단어 수학 www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 알고리즘 완벽하다고 생각했으나 시간초과가 난 이유는 바로 String 연산 때문이다. AB 에서 A=9 이고 B=8 이라고 할 때, 98로 만드는 과정을 아채처럼 할 경우 int answer = 0; String s = "98"; answer += Integer.parseInt(s); 바로 시간 초과가 나온다. 반면 아래처럼 할 경우 시간초과를 피할 수 있다. int temp = 0; for(char c .. 2020. 9. 21.
[JAVA] 부등호 (백준 2529 ) www.acmicpc.net/problem/2529 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력� www.acmicpc.net 부등호의 수가 3 개 이며 서로 다른 한 자리 숫자 는 4 개 라고 가정해보자. 숫자 0부터9 까지 숫자들 중에 4개를 선택해서 모든 경우의 수를 따져야 하는가?? 그렇지 않다. 가장 작은수와 가장 큰 수를 구하는 것이 목적이기 때문에 가장 작은 수와 가장 큰 수의 조합은 이미 정해져 있다. 12,3,4 와 2,3,4,5 를 선택했다고 가정했을 때, 가장 작은 수는 1,2,3,4 에서 나올것이다. 마찬가지로.. 2020. 9. 21.
[PYTHON] 무지의 먹방 라이브 (프로그래머스 kakao 2019) 미리 스포 -> 이분탐색으로 풀어보기 효율성 때문에 겁부터 먹고 들어 갔다. 아무런 알고리즘 없이 문제에서 설명한 그대로 구현한다면 입출력 예 1번 처럼 k가 5라면 최소 5번은 확인해야한다. 만약 k가 2*10^13 이라면 2*10^13 번 확인해야하므로 시간초과가 난다. 즉, 문제 설명대로 구현하지 말고 "어떠한 아이디어를 떠올려봐라"가 핵심이다. 그래서 프로그래머스에서 lv4를 책정한듯 하다. 이런 문제를 접근하기 위해서 시뮬레이션 해보고 규칙이 있는 지 찾아보는 것이 우선이다. 규칙을 찾기 위해 그냥 문제에서 하라는 대로 해보았다. 먼저 아래의 표를 해석해 보자. (참고로) 임의의 테스트 케이스 food_times = [4,2,3,6,7,1,5,8] k=16 이라고 해보자. 3(1초) 라는 말은 .. 2020. 9. 11.