문제https://school.programmers.co.kr/learn/courses/30/lessons/60061 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이해당 문제는 각 기둥과 보의 설치/삭제에 대한 조건이 까다로운 문제이다. 나머지는 그닥 어려운 문제는 아니다. 우선 기둥의 설치부터 살펴보자.문제에서 기둥이 설치될 수 있는 조건을 아래와 같이 정의했다.기둥은 y가 0인 바닥일 때다른 기둥의 위일때보의 양끝(왼쪽 오른쪽)일때그렇다면 4가지 이외의 설치는 안된다는 것이다. 이를 이용해 기둥를 설치할 수 있는지 판별하는 함수를 만들어 주자. 그리고 보의 설치에 대한 조건을 알아보자.문제에서 ..
완전탐색
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이이 문제는 오늘 서류 합격된 회사 코테를 보며 못푼 문제여서 분해서 풀게된 문제다....(분하다...) 이 문제는 각 상담원의 조합들 중 최적의 조합을 선택하는 문제이다. 상담의 종류가 최대 5개이고 상담건수가 최대 300개 이기 때문에 완전 탐색을 진행해도 시간복잡도가 여유로운 편이다.아오 이걸 테스트때 이상한 방법으로 접근했어.... 조합을 구했다면 각 상담원의 인원수에 맞게 총 걸린시간과 상담 종류를 갖는 자료를 만든다.이 자료를 사용하며 구현해야 하는 조건은 다음과 같다. 우선 대기중인 인원은 끝나는 시간이 가장 빠른 상담원과 연결된다. 그..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이완전 탐색으로 라이언이 쏠 수 있는 모든 조합을 구했다. 구한 조합을 이용해 피치가 쏜 결과와 비교하며 최종 점수 차이를 계산해야 한다. 이때 얻은 점수 차이를 이용해 결과를 도출해야 하는데, 주의해야할 점들이 몇가지 있다.첫 번째로 피치가 더 많은 점수를 얻거나 동점이면 피치의 승리이다. 두 번째, 라이언이 더 많은 점수를 얻는 조합 중 가장 낮은 점수를 더 많이 맞힌 경우를 리턴해야한다. 나는 두 번째 경우를 구현하는 것을 잊고 재출했다가 틀린 경험을 했다...... 코드const getComb =..
문제https://school.programmers.co.kr/learn/courses/30/lessons/150368 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이이 문제의 경우 문제를 잘못 이해해 시간을 까먹고 햇갈려했던 문제이다.... 내가 부족해서... 이 문제에서 입력되는 데이터의 양을 보고 시간복잡도를 생각하며 굉장히 널널하다는 것을 알 수 있다.각 이모티콘별 적용되는 할인율이 다를 수 있기 때문에 각 할인율의 조합별로 인원이 구매할 것인지 멤버십에 가입할 것인지 판단하면 된다. 최종적으로는 멤버십이 판매액보다 중요시 되기 때문에 주의해야 한..
문제https://www.acmicpc.net/problem/19236 풀이하...이 문제 진짜 오래 풀었다....(5시간 정도?) 이 문제는 경우의 수를 따져야 하기에 DFS 문제로 인식을 했다. 물론 맞는 선택이였다. 하지만, 로직 동작이 너무 까다로웠다. 물고기의 방향을 검증하는데 새롭게 정해진 방향을 저장해 다음 depth로 전달해야한다. 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n').map(e => e.split(' ').map(Number));const dir = [[-1..
문제https://www.acmicpc.net/problem/14890 풀이문제에 주어진 지도를 가로줄을 검증한다. 오른쪽의 블럭이 왼쪽 보다 클 경우는 이전까지의 평지의 길이를 비교해 경사로를 놓을 수 있으면 넘어가고, 왼쪽블럭이 더 큰 경우는 평지의 길이에서 미리 경사로 설치에 필요한 길이를 빼준다. 이 부분에 대해 설명하자면, 뒤에 평지가 나오면 더해지기 때문에 놓을 수 있다면 하나씩 늘어나 양수가 되지만 놓을 수 없다면(더 크거나 작은 블럭이 있는 경우) 음수가 되기 때문에 반복문을 탈출한다. 이후 가로 세로를 변경해 한번 더 반복한다. 코드const { link } = require('fs');const input = require('fs') .readFileSync(process.platfo..