본문 바로가기

알고리즘['파이썬','JavaScript']26

구름톤 챌린지 2주 day8 학습 일기 그리디였지만, 어렵지 않은 그리디였다. 최적해를 계속 선택하면 되는 문제였는데 조금 더 코드를 깔끔하게 개선한다면, 각 아이템의 고통 감소 수치를 배열로 만들고 반복문을 써서 중복 코드를 줄일 수 있다. items = [ , , ... ] for item in items: ... 2023. 8. 23.
구름톤 챌린지 2주 day7 학습 일기 N행 N열의 격자판이 주어지고, 각 격자의 위치정보에 구름 유무가 0 또는 1로 표현된다. 간단하게 생각하면 지뢰찾기이고 이를 구름찾기로 변형한 귀여운 문제 1. 전체 판을 탐색해서, 0인 위치인지 확인하기 - 그래야 구름이 아닌 칸(아무것도 존재하지 않거나, 깃발을 놓을 수 있는 칸)이기 때문인데 - 만약 1인 위치도 포함한다면 주변에 구름이 K개인 경우가 있는 경우, 해당 칸도 k의 횟수로 포함되기 때문이다. 2. 이제 주변 8칸을 탐색하면 된다. - 내 경우는 탐색할 칸에 대해 미리 배열을 선언하고 반복문으로 해당 요소들을 꺼내왔다. direction = [(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)] ... for dr,dc in directio.. 2023. 8. 22.
구름톤 챌린지 2주 day6 학습 일기 i+j+k의 값이 가장 큰 것을 출력하는 것이 목표 하지만, 부분 문자열을 모두 모으기까지 해당 부분 문자열이, 전체의 정렬된 부분 문자열에서 몇번째인지 알기 어렵다. 따라서 완전탐색을 해야하는 문제. N의 크기가 100이 최대이기 때문에 n^2이더라도 충분하다. 1. 문자열을 3개의 부분으로 나누어야 한다. 2. 나눈 문자열을 (a) 저장하기 [자료구조] set 목적: 모든 부분 문자열을 하나의 자료구조에 저장하고 정렬해야 하기 때문. set으로 중복 제거 (b) 저장하기 -> 저장하지 않고 다시한번 순회도 가능 [자료구조] 배열 목적: i,j,k에 대한 점수 계산(부분 문자열을 다 모으고, 정렬한 뒤에 사용하기 위함) 3. 정렬 4. 점수 계산 2023. 8. 21.
구름톤 챌린지 1주 day5 학습 일기 이진수 정렬 문제 파이썬 풀이 1. bin()으로 문자열 이진수를 만들어준 뒤 2. 배열에 ['이진수'.count(1), 십진수] 순서로 삽입 3. 내림차순 정렬 sort(key = lambda x:(-x[0],-x[1])) bin을 사용한 건 while 등으로 반복문을 사용하는 것보다 빠를 것이라는 생각에서였다. 그런데, 자바스크립트는 어떻게 풀지 싶어서 이진수 부분을 검색해보니 Number의 toString(2)를 사용한다고 한다. 참으로 편리하게, (파이썬처럼) 슬라이스를 할 필요 없이 바로 이진수 문자열이 반환된다. 그리고 문자열을 배열로 만들어주는 과정이 필요하다. .split('') 그리고 1을 세는 방법은 filter 메서드를 사용하는 것이고, filter(num => num === '1').. 2023. 8. 19.
구름톤 챌린지 1주 day4 학습 일기 3일차 까지는 난이도가 별1개였지만, 오늘부터 난이도가 별 2개! 1. 최댓값을 기준으로 인덱스값이 증가 또는 감소할 때 검사하는 코드가 중첩되지 않도록 이번에는 함수화했다. (인덱스가 증가하거나 감소하는 부분만 다르고 나머지 로직은 똑같다는 판단) - 함수의 매개변수는 3개 (1) 햄버거 배열 (2) 배열의 max값에 해당하는 index중 가장 작은 값 (3) +1인지 -1인지 인덱스 증가 방향 2. 인덱스 값이 증가할 때 그리고 인덱스 값이 감소할 때 검사한 함수에서 (1) 모두 true를 반환하면 해당 배열의 전체 합을 계산후 출력했고, (2) 하나라도 false를 반환하면 0을 출력했다 테스트 케이스를 추가로 작성할 수 있고 실행해볼 수 있어서 편한데, 예상 출력값이 같이 포함되면 좋을 것 같다... 2023. 8. 17.
구름톤 챌린지 1주 day1 학습 일기 구름톤 챌린지 구름LEVEL 알고리즘 먼데이 챌린지가 구름톤 챌린지로 새롭게 찾아왔습니다. 온라인 알고리즘 문제 풀이와 오프라인 팀 챌린지를 모두 즐길 수 있는 구름톤 챌린지와 4주 동안 매일 꾸준히 성장 9oormthonchallenge.oopy.io 구름톤 챌린지 시작~! [배운점] [느낀점] [어려웠던 점] 첫날이었는데, 첫 주 문제 카테고리는 구현이었다. 기본적인 구름 IDE 사용법을 익히기 위한 입출력과 간단한 수식만 작성하면 되는 문제. 구름 IDE는 오랜만이었지만 사용법이 간단했다. 최근 스터디에서 다뤄지는 주제가 구현이었는데 마침 챌린지 첫주차 주제가 구현이어서 알고리즘 스터디원들에게 챌린지를 홍보했다. 참여한 목적은 일단, 최근 코딩테스트 문제 유형에 대한 트렌드를 알면 가장 좋을 것 같.. 2023. 8. 14.
정리해야 할 필수적인 알고리즘 누적합 구현 그래프 이론 DFS BFS 트리순회 완전탐색 백트래킹 비트마스킹 그리디 라인스위핑 투포인터 LIS 이분탐색 DP 최단거리 2023. 3. 7.
2차원 배열 누적 합 1. 내 생각이 막혔던 부분 첫번째 - arr [ i ] [ j ] (1) 첫번째 행을 누적해서 더한다.(이 부분은 일단 맞음) (2) 두번째 행은.. arr [ 0 ][ j ]를 arr[ 1 ][ j ] ?에? 더하는 건데.. 바로 결괏값이 나올수가 있나? => 이 부분에서 막혔다. 열을 어떻게 하지? 일단 틀린건, arr[0][j]가 아니다. sum_list[ 0 ][ j ] 이다. sum_list[ 0 ][ j ] = sum(arr[ 0 ][ : j ]) 이렇게도 가능 sum_list[ 0 ][ j + 1 ] += arr[ 0 ][ j ] 그런데, sum_list[ 0 ][ j ]를 하게 되면, 한 칸 한 칸이, sum_list의 값이 된다. 잊어버리지 않게 표시하자면, sum_list의 1행은 다.. 2023. 3. 7.