알고리즘 30

BOJ - 11399 ATM

문제 링크 : https://www.acmicpc.net/problem/11399문제 티어 : 실버 4문제 유형 : 그리디 알고리즘 문제 풀이 1) N을 입력 받고 그 아래 N 만큼 숫자를 입력 받는다. 2) Pi가 주어지고 Pi가 작은 순대로 index를 정렬 해준다.  즉, 오름차순 정렬 해줌3) 그 후 이전에 것들과 함께 더 해줌  문제 코드 const fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().split("\n");let n = Number(input[0]);// Pi 입력 받음let arr = input[1].split(" ").map(Number); // arr 오름차순 정렬 arr.sort((a,b)=>a-..

BOJ - 11047 동전 0

문제 링크 : https://www.acmicpc.net/problem/11047문제 티어 : 실버 4문제 유형 : 그리디 알고리즘문제 방법 1) N, K 를 입력 받는다. 2) 이미 오름차순으로 주어지고 있다. 그러나 우리는 동전 갯수를 최소로 써야 하기 때문에 역순으로 먼저 써야 한다.3) 만약 동전의 가치가 K보다 크면 그냥 skip 하고 K보다 작으면 몫만큼 동전의 갯수로 더해준다. ( 4200 / 1000 = 4개의 동전) 4) 3) 과정에서 나온 나머지를 다시 3) 과정 반복 5) 만약 위 과정을 반복한 나머지가 0이 되면 종료 후 동전의 갯수 출력 문제 코드 const fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString..

BOJ - 1427 소트인사이드

문제 : https://www.acmicpc.net/problem/1427문제 등급 : 실버5문제 풀이 : 총 두 가지 문제 풀이가 있다.1)  문자열로 만들어서 하나씩 쪼갠 후 내림차순 정렬 후 다시 합쳐주는 방식이 있다.  ex) 92413  -> 9 , 2 ,4 , 1 , 3 을 sort()로 내림차순으로 만들어준 뒤 다시 합쳐주는 것2) 10개의 숫자 digit이 존재하고 0~9까지 모든 숫자에 대하여 빈도수를 센다 ex) 999243 => 9 => 3번 , 2 => 1번 , 4 => 1번 , 3 => 1번   그 후 각 숫자를 내림차순으로 하나씩 확인 후 , 빈도 수만큼 출력해준다.  문제 코드 1) 번 풀이const fs = require("fs");let input = fs.readFileS..

BOJ - 18870 좌표 압축

문제 : https://www.acmicpc.net/problem/18870문제 등급: 실버2 문제 아이디어 ; 정렬 후 딕셔너리를 사용해서 index를 순위로 표현 해준다. 문제 풀이 1) 좌표 압축 : 각 값을 크기 순위로 변형 하는 것이다. 문제 이해 부터 어려웠는데 결론적으로 각각 입력 받은 좌표값들이전체 좌표값들 중에서 몇 번째로 큰 좌표인지를 입력받은 형태와 동일하게 출력 해준다. 2) 입력 배열 const fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().split("\n");let N = Number(input[0]);let arr = input[1].split(" ").map(Number);3) 중복 제거 및 ..

BOJ - 1181 단어 정렬

문제 : https://www.acmicpc.net/problem/1181문제 등급: 실버5문제 풀이: 길이가 짧은 것부터라는 조건이 있으니 정렬 기능이 들어가야 할 것이라 생각했고 또한 중복된 단어는 허용하지 않는다는 조건으로 인해 Set 즉 집합 조건을 생각할 수 있었다. 길이가 같으면 사전순이라는 말 또한 JS에서는 return 1 , 0 , -1 을 통해 오름차순 , 동치 , 내림차순을 필터링 해준다는 것을 알 수 있었다. 시간복잡도 : O(NlogN)const fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().split("\n");let N = Number(input[0]);// 1. 입력 받음let arr = [];..

BOJ - 11650 좌표 정렬하기

문제 : https://www.acmicpc.net/problem/11650문제 등급: 실버5 문제 풀이 : x좌표 기준으로 오름차순 정렬 후 같으면 y좌표 증가하는 방식이다. const fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().split("\n");let N = Number(input[0]);let arr = [];for(let i=1;i 배운 것 : a[0] , b[0]  / a[1], b[1] 에 대해 설정한 것은 예시로 들면 다음과 같다.만약 arr 이 [ [1,2] , [2,3] ,[3,5] ] 이런 식으로 들어가 있을 때 a[0]은 1 , b[0]은 2와 같다.이런 식으로 a[0] = 2 , b[0] = 3..

BOJ - 11004 K번째

문제 : https://www.acmicpc.net/problem/11004문제 등급 : 실버 5 문제 풀이 :  두  수를 받아서 이를 정렬 한 다음 주어진 K를  index로 하는 수(K-1)를 console.log로 찍어주면 된다.const fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().split("\n");let [N,K] = input[0].split(" ").map(Number);let arr = input[1].split(" ").map(Number);for(let i=1;ia-b);console.log(arr[k-1]); 배운 것띄어쓰기 기준으로 한 줄에 여러 개 받는 것 : input[0].split(" "..

BOJ - 2745 진법 변환

기본부터 다시 시작하자는 마음으로 퇴근하고 기본 문제라도 하루 1~2문제는 풀자고 마음 먹었다. 하반기때는 부디 코테로 발목 잡히지 않기 위해 열심히 해야겠다..! https://www.acmicpc.net/problem/2745 2745번: 진법 변환 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 1. 풀이 진법 변환에 대해 생소해서 규칙을 찾는데 애를 좀 먹었다. ex) 2진법 -> 10진법 11111 -> 2**4 + 2**3 + 2**2 + 2**1 + 2**0 = 31 왼쪽 수 부터 갯수만큼 진법으로 바꾸고자 하는 수의 거..

프로그래머스 LV 1 K번째 수

문제 유형 : 정렬 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42748 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 문제 풀이 1) array = [1,5,2,6,3,7,4] 일 때 i,j,k가 무엇인지를 파악하는 것이 중요했다. i = 2 : i부터 j = 5 : j까지 k = K번째 숫자 2) commands = [ [i,j,k] [i,j,k] ] 이런 식으로 2차원 배열이기 때문에 commands를 해석해주는 것이 중요했다. commands= [ [2,5,3] , [4,4..

프로그래머스 LV 2 큰 수 찾기

문제 알고리즘 유형 : 정렬 https://school.programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 문제 해결 방법 1) 첫 번째 풀이 방법 : 순열 사용 첫 번째 방식으로는 순열 방법을 사용 했다. 먼저 numbers를 문자로 바꿔주고 이를 순열 처리 하면 ('6' , '10' , '2' ) , ('6' , '2', '10') 이런 식으로 나온다. 그래서 join으로 합쳐준 뒤 숫자로 바꿔줘서 최댓값을 찾고 문제에서 요구한대로 문자로 다시 바꿔줘서 answer..