반응형

알고리즘 문제 풀기 243

백준 1744: 수 묶기 - javascript(그리디)

문제 출처 https://www.acmicpc.net/problem/1744 문제 풀이머리 뽀갈 날뻔 했다.그래도 1시간 30분 걸려서 풀어냈다..    역시 test case를 추가하면서 어떤 부분을 놓쳤는지 알아내는 것이 참 중요하다 처음에 작성한 코드는 웬만하면 틀린 부분이 있기 때문에,  console.log() 를 잘 이용해서 자신의 실수를 잘 발견하는 것이 코테의 핵심이라는 생각이 든다.  거두절미하고, 이 문제의 핵심은 뭐다?"어떻게 묶어야 최대의 값이 될까?" 내가 세운 기준은 이렇다.  - 1. 절대값이 큰 숫자대로 곱한다. - 2. 양수끼리 계산하고, 음수끼리 계산한다. - 3.양수끼리 계산할 때 1은 묶지 말고 더해준다. - 4. 음수끼리 계산할 때 0이 있다면 묶어준다.  이제 이 ..

백준 1339: 단어 수학 - javascript(그리디)

문제 출처 https://www.acmicpc.net/problem/1339 문제 풀이 이건 정말 아이디어가 필요했다. 난 정~ 말 복잡하게 풀었었는데, 해법을 보고 머리를 탁 ~ 쳤다 ! 앞으로 비슷한 문제가 있다면 이런 접근을 활용해야 겠다   이 문제는 사실 두개를 고려해야 하는데 우선순위가 높을 수록 높은 숫자를 받는 것이라고 할 때, - 높은 자리에 있을 수록 (십의 자리 > 일의 자리) 우선순위가 올라간다. - 빈번하게 나타날 수록 (만약 십의 자리에 있는 문자가 'A', 'B'가 있을 때, 만약 A가 일의 자리에 B보다 더 많이 나타났다면)우선순위가 올라간다. 이 복잡한 셈처럼 보이는 것이 아주 ~ 간단한 아이디어로 쉽게 풀린다.  "각 문자를 돌면서 해당 문자가 있는 자리수를 계속 더해주는..

백준 2110: 공유기 설치 - javascript(이진탐색, 그리디)

문제 출처 https://www.acmicpc.net/problem/2110 정답 풀이 흠 이 문제의 입력값을 봐보자. 집의 개수는 무려 (2공유기의 개수는 (2집의 좌표는 (0 엄청난 범위,,, 어떤 알고리즘이 생각나는가?이진탐색 !!!  이진탐색은 어떤 값을 기준으로 탐색해나갈 것인가가 중요하다. 여기서는 `공유기 사이의 최대거리`를 기준으로 탐색하면 되겠다.  공유기 사이가 될 수 있는 범위는 (1이상 ~ 가장 마지막 집 - 가장 첫번째 집) 이 될 것이다. 아래 그림을 보면 이해가 쉽다.   정리하자면,  - 공유기 거리의 최솟값은 : 1 - 공유기 거리의 최댓값은 :  마지막 집 위치 - 첫번째 집 위치    이제 문제를 두 부분으로 나눠서 생각하면 된다. - 공유기 최대 거리를 이진탐색으로 찾..

프로그래머스: 자물쇠와 열쇠 - javascript(단순 구현)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/60059 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이 이런 문제는 시간을 두고 본인이 해결할 때까지 다른 사람이 푼 코드를 보지 않는다면 좋겠다. 어떤 특별한 알고리즘이 필요한 것이 아니라서,, 자기가 끈질기게 구현해보는 연습을 할 수 있는 좋은 문제인 것 같다.  하지만 이 정도의 아이디어는 얻고 혼자 풀면 좋을 것 같은데 아래 그림과 같이 주어진 lock을 가로, 세로 3배씩 확장시킨 그래프로 생각하는 것이다. 그래서 거기서 k..

프로그래머스: 매칭 점수 - 실수 축제 (중괄호랑 return)

아래와 같이 작성했을 때, idx를 찾지 못한 것을 발견했다. let urlIdx = pageArr.findIndex((p) => { p.match(//gi)}) 이유) - 화살표 함수가 중괄호로 감싸져 있기 때문 - 중괄호를 사용하면 명시적으로 `return` 키워드를 사용하지 않는 한, 함수는 'undefined'를 반환한다. - 이 경우, p.match()이 부분의 결과가 반환되지 않으므로, findIndex는 항상 -1를 받고 -1를 반환한다. let urlIdx = pageArr.findIndex((p) => { return p.match(/  그래서 return 을 명시적으로 추가해줘야 한다.  혹은  중괄호를 쓰지 않는 방법이 있다.  let urlIdx = pageArr.fin..

프로그래머스: 재구매가 일어난 상품과 회원 리스트 구하기 - MySQL

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/131536 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이 `GROUP BY`와 `HAVING` 절은 - 데이터를 그룹화하고, - 특정 조건을 만족하는 그룹만을 필터링한다.  ## GROUP BY - 데이터를 특정 컬럼 기준으로 그룹화하는 데 사용된다. - USER_ID와 PRODUCT_ID 기준으로 데이터를 그룹화하고 있습니다.- 예를 들어, USER_ID가 1이고 PRODUCT_ID가 101인 모든 행이 하나의 그룹으로 묶입니다. ..

프로그래머스: [3차] 자동완성 - javascript(체이닝, 트리)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/17685 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 풀이  아무래도, 다른 블로그의 설명이 충분하지 않았다. 그래서 혼자 이해하려고 하는데 시간이 꽤 걸렸다. 그래서 기록으로 자세히 남겨보려 한다.  자, 이 문제는 두개의 과정으로 나뉜다. - 먼저 주어진 words를 활용해서 트리를 생성할 것이다. - 우리가 생성한 트리를 탐색하면서 각 문자가 몇 글자까지 입력해야 하는지 셀 것이다.  코드를 살펴보기 전에 먼저 이해부터 하자.  ##..

프로그래머스: 조건에 맞는 도서 리스트 출력하기 - MySQL

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/144853 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 정답 코드 SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATEFROM BOOKWHERE DATE_FORMAT(PUBLISHED_DATE, '%Y') ='2021' AND CATEGORY = '인문'ORDER BY PUBLISHED_DATE ASC

프로그래머스: 12세 이하인 여자 환자 목록 출력하기 - MySQL

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/132201 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 정답 코드 SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') AS TLNOFROM PATIENT WHERE AGE

프로그래머스 : 플로이드 - python3 (플로이드와샬, 최단거리)

문제 출처 https://www.acmicpc.net/problem/11404 문제 풀이  문제 자체는 전형적인 최단 경로 문제이다.  다만 문제에서 주의할 점은, (나도 이걸로 틀렸다..) 시작 도시 A와 도착도시 B를 연결하는 간선이 여러 개일 수 있다는 점이다. => 그럼 가장 최소값만 고려해주면 됨.  예를 들어 A => B 간선 비용 3,A=> B 간선 비용 5일 때, A=> B 간선미용 3만 고려해주면 된다는 뜻이다.  도시의 개수 N이 100이하의 정수다. 어떤 생각이 드는가? 플로이드 워셜 알고리즘을 이용하는 것이 효과적이겠다!- 시간 복잡도 O(n^3) 이지만, 입력값이 작으니 충분하다. - 해당 노드에 대해서 모든 노드에 대한 최솟값거리를 구할땐, 플로이드 와샬 알고리즘 사용하기  플로..

반응형