ArrayList를 선언하고 , 특정 값이 value라고 할 때If( ArrayList.indexOf(value) < 0 ) Arraylist.add(value);이런 식으로 해야함. indexOf는 특정 value가 없으면 -1을 리턴하기 때문에어레이 리스
풀이 방식먼저 5\*5 배열을 담는 map6자리 숫자를 담는 배열 arr\[]6자리 숫자를 스트링으로 변환해서 중복없이 담는 list 를 선언map의 모든 지점에서 동서남북으로 dfs를 모두 호출(단, 배열 범위 안일때만)핵심은 dfs를 전부 호출해서 만든 6자리 숫자
풀이 방식전체 문서인 str , 검색하려는 단어 input 스트링 선언 후문서중에 input.charAt0 으로 시작하는 지점이 있는지 찾고 있다면 그 지점부터 input 크기만큼 자른 것이 input과 같은지 체크한다.중복되지 않게 input스트링을 검색해야하므로 이
처음엔 그리디로 해결할 수 있을거라 생각하여 특정 지점에서 최선의 선택을 하는 방식으로 풀었으나 계속 틀렸다.1일에 상담을하면 4일부터 상담이 바로 가능하지만 4일에는 하지않고 5일부터 하는 것이 더 최선의 선택일 수도 있기때문에 그리디로 푸는 것이 잘못되었음을 알았고
풀이 방법먼저 8\*8 체스판의 구성은 B로 시작하는 경우 , W로 시작하는 경우 두가지뿐이므로 미리 두 개의 체스판을 미리 만들어 두었다.여기서 주어지는 입력은 88보다 크기때문에 88로 만들수 있는 모든 경우를 체크했다. 매 지점마다 미리 만들어둔 체스판이랑 비교해
풀이 방식비가와서 잠기는 깊이 depth 를 1씩 늘려가면서 depth보다 높은 즉, 안전영역에서 dfs를 호출한다. 여기서 주변에 인접하면서 아직 방문하지 않은 곳은 하나의 안전영역을 생성한다.dfs의 호출 횟수가 곧 안전 영역의 갯수가 된다. 이 값을 리스트에 담고
직관적인 방식으로 풀지않고 DP로 풀려고 노력했다. 먼저 target은 배달해야하는 설탕의 양, dp\[] 은 해당 target에서 필요한 최소 봉지의 수를 담는 배열로 설정했다.먼저 dp3 = 1, dp5 = 1 을 설정.target =15 같은 경우는 5와 3모두
처음에 일단 DP배열에 들어갈 경우의 수를 하나씩 적다보니 피보나치 수열 형태를 가진다고 생각했다. 친구에게 물어보니 00타일 1타일을 쓰는경우가 곧 2개 , 1개씩 가져가는 피보나치 수열과 동일한 형태임을 알려주었다.dpi = dpi-1 + dpi-2; 라고 쉽게 풀
<풀이방식>점프하는 경우 : stairi + stairi-1 + dpi-3점프 안하는 경우 : stairi + dpi-2이 두가지 중에서 MAX값을 취하면서 DP배열에 저장한뒤마지막 DP(n) 을 출력.
삼각형 모양으로 배열에 값을 저장하는걸 할줄몰라서 처음에 애를 좀먹었음. 다음과 같이 간단하게 작성가능한데, 저걸 몰랐어서 카운트세면서 브레이크 거는 방식으로 구현했다.그리고 배열에 첫번째 열은 0으로 채워주어 인덱스 오류를 방지했고 arri += Math.max(ar
특정 숫자는 3으로만 나눠지거나 2로만 나눠지거나 2,3 모두 나눠지거나 2,3 둘다 나눠지지 않는 4가지로 나눌 수 있다.3으로만 나눠진다면 3으로 나누거나, 1을 빼거나 2가지 액션이 가능하다.이 중의 최소값을 선택해야하므로처음에 2,3 모두 나눠지는 경우에는 어떤
먼저 2차원 배열 DP를 선언한다. N =1 인 경우에는 M의 값이 곧 배열의 값이 되고 , N = M 이라면 배열의 값은 1이된다.이러한 값을 먼저 채운 다음dpi = dpi-1 + dpi 라는 수식이 성립함을 찾았다. 최종적으로 dpN 의 값이 최대값이 된다.
<풀이방식>각각 갯수로 카드를 살때의 가격이 담긴 card\[]를 선언한다.5개를 살때의 최대값은4개 구매 최대값 + 1개 구매값3개 구매 최대값 + 2개 구매 최대값2개 구매 최대값 + 3개 구매 최대값1개 구매 최대값 + 4개 구매 최대값이 4가지의 경우 중
1. 먼저 처음 주어지는 수식을 '-' 기준으로 자른다. 이유는 '-' 양쪽에 있는 애들을 각각 더해서 빼는게 가장 차이가 크게 벌어지기 때문이다. 예제를 기준으로 55-50+40 은 55 , 50+40 으로 나뉜다. 2. 앞에서 '-' 기준으로 나눈 토큰을 다시
A 배열에서 B 배열로 바뀌는 알고리즘이 있을것이라 생각해서 고민했는데 도저히 생각이 안났다. 결국 친구가 알려주기를 3\*3 배열 크기만큼 검사 가능한 지점마다 모두 체크를해야한다고 했다. 즉, 예제의 경우 (0,0) , (0,1) 지점이 가능한 지점이며 이 지점마다
풀이방법먼저 맵을 입력받고 dfs를 호출했다.왼쪽 열에서 맨 오른쪽 열까지 dfs를 탐색하면서 처음에는 방문배열을 이용했으나한 지점에서 맨 오른쪽 열까지 갈 수 있는 경로의 경우는 체크할 수 있었느나여러지점에서 경로가 겹치지않고 연결 할 수 있는 최대 파이프 경우의 수
풀이방법각각의 재료마다 점수와 칼로리가 다른데 제한칼로리를 채우기 위해부분합 알고리즘을 사용했다.부분합 함수에서 재료를 추가하는경우 , 추가 안하는 경우 따로따로 재귀를 했다그리고 제한 칼로리보다 작은 경우는 리스트에 추가하고 점수가 가장 높은것을 뽑았다.
풀이 방법부분합 알고리즘을 사용했다. 재료를 고르는 경우 신맛은 곱하고 쓴맛은 더해서 재귀했고고르지 않는경우는 그대로 재귀했다.아무것도 뽑지 않는 경우는 제외하고 신맛, 쓴맛의 차이를 리스트에 담은 후 가장 작은 값을 뽑았다.
풀이방법먼저 맵의 사이즈를 2 의 n승으로 계산한후찾으려는 숫자의 R ,C, 맵 사이즈를 파라미터로 갖는 함수로 간다.사이즈가 2인 사각형은 0,1 , 2 ,3 뿐이므로 그때마다 숫자를 더해주고 종료했고그 이상의 사각형은 R ,C 에 따라 어떤 사분면에 위치하는지를 먼
수백만개의 숫자중에서 원하는 숫자를 매일 하나씩 찾을 것이다.매일 수백만개의 숫자중에서 단 하나의 숫자만 바뀐다. 어떤 알고리즘을 사용할 것인가?버블 정렬은 배열에서 2개씩 선택하여 크기를 비교하고 스왑하는 것을 반복한다.더 좋은 알고리즘들이 많기에 자주 쓰이진 않지만