본문 바로가기

Algorithm8

그리디 - 숫자 카드 게임 이차원 배열에서 행 중 가장 작은 수만 골라서 그 중 가장 큰 수를 찾는 게임 이차원 배열을 입력받으면서 그 중 작은수들을 고르고 한번 더 비교를 통해 더 큰 수를 찾는다. 현재 문제에는 몇번째 행이라던가 그런 추가 조건이 없기 때문에 비교적 쉬운 문제다. 사실 배열은 생성할 필요도 없지만 현재 테스트 코드에서 모든걸 끝내기 위해 작성했다. @Test void 그리디_숫자_카드_게임() { // 배열의 한 행을 고르는데, 배열의 행에서 가장 작은값이 선택될 경우 가장 큰 값을 고르는 방법 int n = 3; int m = 3; int[][] arr = { {3,1,2}, {4,5,4}, {2,2,2} }; List list = new ArrayList(); for (int i = 0; i < n; i++.. 2022. 1. 5.
그리디 - 큰 수 구하기 n, m, k 세 개의 값을 받아서 n 만큼의 숫자를 배열에 담고, m 번 만큼 숫자를 나열하는데 한 숫자당 연달아 k만큼 가능하다. n = 5, m = 5, k = 2 n = { 1, 2, 3, 4, 5} 가장 큰 수의 조합은 5 5 4 5 5 형태가 된다. @Test void 그리디_큰수구하기() { // 같은 숫자를 연달아 k번 반복가능, m만큼 나열했을때 가장 큰수 int m = 8; int k =3; /** * 만약 값을 입력받는다면 List로 받아서 Collections 정렬을 하자. * 배열로 받아서 Arrays.sort는 reverseOrder가 까다로움. */ List list = Lists.newArrayList(2, 6, 4, 5, 4); list.sort(Collections.rev.. 2022. 1. 4.
종만북이 설명하는 알고리즘 풀이 순서 1. 문제를 읽고 이해한다. 2. 문제를 익숙한 용어로 재정의한다. 3. 어떻게 해결할지 계획을 세운다. 4. 계획을 검증한다. 5. 프로그램으로 구현한다. 6. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다. 예전에 백준문제를 풀다가 모르는 문제에 대하여 유튜브 설명을 찾아보면 1,3,4,5 형태로 풀었던것같다. 나같은 경우는 항상 3,5 식으로 알고리즘을 풀었다. 처음 알고리즘을 풀때 input을 받는 부분에서 엄청난 스트레스를 받았었다. ( 처음 백준을 풀려고 보면 input을 받는게 매우 답답함 ) 그것때문인지 input 받는게 조금 익숙해지니까 바로 계획을 세우고 프로그램으로 구현하는게 습관이 됐다. 그냥 성질이 급해서 그런걸수도 있다. 백준이나 프로그래머스에서도, 알고리즘 테스트에서.. 2021. 6. 29.
Hash - 1 해당 글을 포스트하는 이유는 문제를 풀면서 기존에 했던 생각과 바뀐 생각을 기록하여 잊지 않게하기 위함임. 프로그래머스에서 제공하는 해시 기본 문제 완주하지 못한 선수와 전화번호 목록을 풀때 너무 귀찮아서 정답을 봤더니 같은 언어로 완료 처리가 되지 않는다.........주의할 것ㅠ 1. 완주하지 못한 선수 2개의 배열이 주어지고 그 중 일치하지 않는 항목은 찾는 문제 String[] str1 = {"abc", "qwe", "zxc"}; String[] str2 = {"qwe", "abc"}; 대충 이런식으로 정렬되지 않은 두 개의 배열에서 일치하지 않는 하나의 값을 return하는 문제였다. 처음 풀때 중점을 둔 부분은 for을 한 번만 도는것이였다. 내 첫 생각은 다음과 비슷했다. (너무 하기 싫어서.. 2021. 6. 8.
[C++] 소문자 대문자 변형 tolower도 가능 2019. 4. 25.
부분수열 (Subsequence) 일정한 규칙에 따라 한 줄로 배열된 수의 열을 수열이라고 한다 예를 들어 N = {1,2,3,4,5...}는 1씩 증가하는 수열이다. 또한 N2 ={1,3,5..} 2씩 증가하는 홀수 수열이 있다. 이때 N2는 N의 부분수열이라고 표현할 수 있다. 2019. 3. 31.