전체 글 410

[백준 1149번] N과 M(2) - java

문제 설명 1. 숫자 N, M을 입력받는다. 2. 1부터 N까지의 중복 없는 숫자를 사용하여 M의 길이를 갖는 순열을 만든다. 3. 오름차순으로 출력한다. 풀이 과정 1. 간단한 백트래킹 문제이다. 2. 숫자를 하나씩 만들어가다가 M의 길이에 도달하면 출력하면 된다. 3. 간단하게 1에서 만들수 있는수, 2에서 만들수있는수....이렇게 하면 중복 체크 필요 없이도 구현이 충분이 가능하다. (중복없이 구현하는게 더 효율적일 것 같아서 구현 방법을 바꾸었다.) ex) (N=4, M=3인 경우) 1, 2, 3, 4 네 가지의 숫자가 있고, 숫자는 오름차순으로 출력하여야 한다. 줄 1 1 2 줄 2 2 3 줄 3(출력) 4(출력) 4(출력) 위의 표를 보면, 위에서 아래로 숫자가 만들어 지고, M과 줄이 같아지..

알고리즘 공부 2021.08.15

[백준 16496번] 큰 수 만들기 - java

문제 설명 1. 음이 아닌 정수 N개가 들어있는 리스트가 주어진다. 2. 이걸로 만들 수 있는 가장 큰 수를 return한다. 3. 답이 0이면 무조건 0하나만 출력되어야 한다. 0이 아닌 모든 수는 0으로 시작하지 않는다. 풀이 과정 1. 진짜 쉽게보고 풀었는데 생각보다 난이도가 있었다.. 또 다 풀어놓고 뻘짓해서 시간 엄청 보냈다. 문제의 내용을 잘 읽어봐야 할 것이다. 2. 먼저 입력은 String으로 입력받는다. 이걸 사용하면 더 쉽게 풀 수 있다. 3. 입력받은 String들을 배열로 만들고 내림차순으로 정렬한다. 45,4,44,43,42,41 그런데 위의 3까지만 진행하면 이렇게 정렬될 것이다. -> 45,44,43,42,41,4 이걸 해결하는 방법을 생각해 보았는데, '4'라는 자리수로 시작..

알고리즘 공부 2021.08.14

[백준 1149번] RGB 거리 - java

문제 설명 1. 집의 수 N을 입력받고, 집은 R, G, B 세 가지 색으로 칠해질 수 있다. 2. 총 N개의 집에 대해 R, G, B 색으로 칠하는 금액을 입력받는다. 3. 현재 집을 기준으로 위, 아래 집과 색이 달라야 한다. 3. 전체 집을 칠하는 데 가장 적게 드는 금액을 return 한다. 풀이 과정 1. 전형적이고 간단한 DP문제이다. 2. 문제에서 현재 집 기준으로 위, 아래 집과 색이 달라야 한다고 하는데, 굳이 위아래 다 구할 필요 없이, 현재 집 기준으로 아래에 위치한 집과 색이 다르게 구하면 될 것이다. 3. 현재 칠할 장소를 기준으로 가장 적은 금액으로 칠한 장소를 구하면 될 것이다. ex) 빨강 초록 파랑 1번집 5 3 2 2번집 6 1 3 3번집 7 5 4 4번집 1 6 2 5번..

알고리즘 공부 2021.08.12

프로그래머스 위클리 챌린지 2주차 - java

문제 설명 1. 학생들이 각각 모든 학생들의 채점을 한다. 2. 참고로 배열에서 세로로 채점한다. 가로로 생각했다가 시간 버림... 3. 자신이 채점한 점수가 유일한 최대/최소값이면 빼고 계산한다. 4. 90점 이상 : A, 80점 이상 : B, .... , 50미만 : F 이렇게 해서 구한 답을 return하면 된다. 풀이 과정 1. 간단하게 구하는 방법을 생각해 보았는데, 나는 찾지 못하겠다... 2. 일단 자기 점수를 계산해 두고, 이게 최대나 최소에 모두 해당하지 않는 경우인지 알아야한다. 3. 자기 자신의 값이 유일한지를 찾아낸 후 그 값을 빼고, 나누는 값도 빼준다. 4. 총 답을 구해주면 된다.... 그냥 반례 잘 생각하면 돼서 풀이는 사실 별게 없다. 코드

프로그래머스 위클리 챌린지 1주차 - java

위클리 챌린지가 있길래 한번 끝까지 다 해보도록 했다... 문제 설명 1. 원래 이용료, 내가 가진 돈, 이용 횟수를 입력받는다. 2. 이용 횟수에 따라 가격이 계속 증가한다. 3. 내가 가진 금액에서 얼마가 부족한지 return하고, 부족하지 않으면 0을 return하면 된다. 풀이 과정 1. 본래 푼 방식은 그냥 이용 횟수까지 쭉쭉 더해가면서 진행했다. 2. for문으로 돌려서 구하고, 그것에서 기본 금액 money을 빼준 후에, 이게 0보다 작으면 0을 return했다. 3. 풀이 자체는 간단한데 더 편한 방법이 있었다. 코드 이후로 다른 사람의 풀이가 있었는데, 훨씬 간단하고 좋은 풀이가 있었다. 풀이 과정 1. 전체 이용 금액의 경우는 기본 이용금액 * ( 이용횟수 * (이용횟수+1) / 2 )..

[백준 2468번] 안전 영역 - java

문제 설명 1. 맵의 크기 n과 각각의 지역을 입력받는다. 2. 건물의 높이들에 대해 비가 아예 안오거나 건물만큼 온다. 3. 비가 건물의 높이만큼 오면 침수된다. 3. 침수되지 않은 건물의 영역을 구해서, 이 영역의 '개수'가 최대가 되게 return하면 된다. 풀이 과정 1. 이전 게시글의 섬의 개수와 거의 비슷한 로직이다. 2. main에서 for문이 돌 때를 새로운 안전 영역을 찾는 기준으로 두고 이 때마다 개수를 늘린다. 3. dfs안에서는 방문했던 장소인 것을 체크해 주고 그것을 기준으로 방문하지 않은 다른 안전 영역을 찾아가면 된다. 4. 쭉 구하면 답이 나온다. 5. 주의해야 할 점으로, 비가 아예 오지 않는 경우를 꼭 생각해 주어야 한다. 코드

알고리즘 공부 2021.08.05

Ajax를 통해 불러온 데이터에 클릭 이벤트 바인딩하는법

ajax를 통해 불러온 데이터는 기존에 사용하던 방법으로는 이벤트를 바인딩하지 못한다. 그래서 ajax를 만들 때에 하드코딩으로 바로 event를 넣어버리는 경우가 있는데, event는 따로 javascript태그 안에 만들어 두는 것이 유지보수나 가시성에서 편리하다. 따라서 다른 방법으로 바인딩하는 것이 좋다. $(document).on('click', '클래스명 혹은 id', function(){ 이벤트 내용. }); 이렇게 하면 javascript로 만들어진 값에 클릭 이벤트를 넣을 수 있고, 당연히 ajax로 불러온 데이터도 가능하다. 참고로 click 이벤트 이외에도 여러 이벤트를 바인딩 할 수 있다. 자주 쓰이는 이벤트를 적자면 이벤트명 용도 mouseover 마우스가 올라왔을 경우 mouse..

[백준 4963번] 섬의 개수 - java

문제 설명 1. 각각 테스트 케이스에서 섬의 크기를 입력받는데, 섬의 크기가 0, 0이면 종료되며 그 이전까지는 계속 입력받는다. 2. 해당 섬의 크기에 맞춰 1은 육지, 0은 바다로 지도를 만들어낸다. 3. 각 땅에서 상하좌우대각선 총 7방향으로 땅이 있으면 이동할 수 있다. 3. 모든 테스트 케이스에 맞춰 총 섬의 개수를 return하면 된다. 풀이 과정 1. 지뢰찾기와 비슷한 로직이다. 2. 현재 위치를 기준으로 dfs를 사용하면 된다. 3. 현재 위치 주변 7방향을 탐색하며 check해 주고, 물이면 나가고 땅이면 다시 dfs를 시도한다. 4. for문을 돌려서 check하지 않은 땅들을 기준으로 값을 받아오면 된다. 코드

알고리즘 공부 2021.08.04