본문 바로가기

알고리즘26

[백준 / 2164 / node.js] 카드 2 javascript 처음에는 그냥 class로 queue를 구현해서 동작시키려고 했다. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n'); const n = parseInt(input.shift()) class Queue { constructor(num){ this.arr = []; } enqueue(num){ this.arr.push(num); } drop(){ this.arr.shift(); } move(){ this.enqueue(this.arr.shift()) } length(){ return this.arr.length; } ans(){ return this.arr.shift(); } } con.. 2021. 9. 22.
[프로그래머스/javascript] 짝지어제거하기 js 효율성검사 2번때문에 당황 했던 문제. 문제 자체는 어렵지않다. 배열을 하나 생성해주고 s를 쭉 순회하면서 배열에 담아준다. 그러면서 생성한 배열의 마지막 값과 현재 순회중인 s의 요소 값이 같으면 배열의 마지막 값을 pop해주고 다르면 현재값을 push해준다. function solution(s) { let tmp =[] let arr = [...s]; if(s.length % 2!==0) return 0 for(let cur of s){ if(tmp[tmp.length-1] === cur){ tmp.pop() }else{ tmp.push(cur) } } return !tmp.length ? 1 : 0; } 그리고 만약에 그 배열이 비어있으면 1을 리턴 하나라도 남아있으면 0을 리턴해주면된다. 여기서 .. 2021. 9. 1.
[백준 / 1929 / nodejs] 소수구하기 javascript 소수 구하기 문제는 에라토스테네스의 체를 쓰거나 범위의 제곱근까지만 비교해서 찾는 방식이 대부분인 것 같아서 둘 다 해봤다. 1. 2~ 제곱근까지 나눠보기 let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n'); const isPrime = (num) => { if(num === 1) return false; for(var i=2; iparseInt(e)); for(var i=n; iparseInt(e)); const arr = Array.from(Array(m+1).keys()) for(let i=2; i 2021. 8. 24.
[백준 / 1920/ nodejs] 수찾기 javascript nodejs로 풀었다. 처음시도했던 방식은 includes를 사용했다. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n'); const N = parseInt(input.shift()) const arr = input.shift().split(' '); const M = parseInt(input.shift()) const arrM = input.shift().split(' '); arrM.map( e => {arr.includes(e) ? console.log(1) : console.log(0)}) 결과는 시간초과 1. 이진탐색 그래서 이진탐색으로 시도해봤다. let fs = requ.. 2021. 8. 24.
[백준/nodejs/1085] 직사각형에서 탈출 javascript (0,0) 과 (w,h) 에 꼭짓점이 있고 주어진 (x,y)좌표에서 가장 가까운 거리를 가진 거리를 제출하면 된다. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().split(' '); const [x,y,w,h] = input; let res = []; res.push(x) res.push(y) res.push(Math.abs(x-w)) res.push(Math.abs(y-h)) console.log(Math.min(...res)) x,y,w,h를 구조분해할당으로 각각 받아서 x-0 , y-0, x-w, y-h 중 가장 작은 값을 찾으면 됨. 2021. 8. 11.
[프로그래머스] 거리두기 확인하기 javascript javscript 거리두기 확인하기 문제풀이 https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr bfs로 문제를 풀었습니다. 2자리 거리까지 .. 2021. 8. 10.
[프로그래머스 javascript] 124 나라의 숫자 주의해야할 점 입출력 결과물만 보고 프로그래밍하기 시작하면 규칙을 찾는데에 어려울 수 있다. 3으로 나눈 나머지가 0이면 4 1이면 1 2면 2 를 반복해서 찍어주고 n은 n이 나누어떨어지는 경우에는 3으로 나눈 몫 -1 을 나누어 떨어지지 않으면 3으로 나눈 몫으로 바꿔주고 반복한다. function solution(n) { var answer = '' var arr=[4,1,2] while(n>0){ answer = arr[n%3] + answer if(n%3 == 0) n = parseInt(n/3) -1 else n = parseInt(n/3) } return answer; } 아니면 function solution(n) { var answer = '' var arr=[1,2,4] if (n===.. 2021. 7. 3.
[프로그래머스 javscript] 키패드 누르기 [카카오 인턴] 키패드 누르기 문제 설명 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까.. 2021. 7. 2.
[프로그래머스 python, javascript] 로또의 최고 순위와 최저 순위 https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr javascript와 python 모두 filter 함수를 사용했다. 약간의 사용법은 다르다. 문제 풀이는 적어도 맞힌 갯수와 최대로 맞힐 수 있는 갯수를 구하면 된다. #javascript function solution(lottos, win_nums) { var answer = []; var rank=[6,6,5.. 2021. 7. 1.
[프로그래머스 python, javascript] 소수구하기 https://programmers.co.kr/learn/courses/30/lessons/12977?language=python3 코딩테스트 연습 - 소수 만들기 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 programmers.co.kr 3중 for문을 사용해서 각 숫자들의 조합을 더해 소수인지 판별하기만 하면 되는 문제이다 #javascript function isPrime(n){ for (var i = 2; i 2021. 7. 1.
[백준 파이썬 2667 ] DFS 단지번호붙이기 단지번호붙이기 성공출처 시간 제한메모리 제한제출정답맞은 사람정답 비율 1 초 128 MB 85824 35346 22337 39.278% 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. 입력 첫 번째 줄에는 지도의 크기 N(정사각형이므로 가로와 세로의 크기는 같으며 5≤N≤2.. 2021. 6. 29.
파이썬 DFS 등산경로 문제 등산경로(DFS) 등산을 매우 좋아하는 철수는 마을에 있는 뒷산에 등산경로를 만들 계획을 세우고 있습니다. 마을 뒷산의 형태를 나타낸 지도는 N*N 구역으로 나뉘어져 있으며, 각 구역에는 높이가 함께 나타나 있습니다. N=5이면 아래와 같이 표현됩니다. 2 23 92 78 93 59 50 48 90 80 30 53 70 75 96 94 91 82 89 93 97 98 95 96 100 어떤 구역에서 다른 구역으로 등산을 할 때는 그 구역의 위, 아래, 왼쪽, 오른쪽 중 더 높은 구역으로만 이동할 수 있도록 등산로를 설계하려고 합니다. 등산로의 출발지는 전체 영역에서 가장 낮은 곳이고, 목적지는 가장 높은 곳입니다. 출발지와 목적지는 유일합니다. 지도가주어지면출발지에서도착지로갈수있는 등산경로가몇가지인지구하.. 2021. 6. 29.
[파이썬 15651] 백준 N과 M (3) DFS 중복순열 https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net DFS 문제를 풀 때는 그림을 그려서 이해하면 접근이 조금 쉬워진다. 중복순열은 m개를 선택해 나올 수 있는 모든 수의 조합을 나열하면 된다. 예를 들어 3개중 2개를 택해야 하는 상황이라면 arr[0] = 1 arr[1] = 1, 2, 3 arr[0] = 2 arr[1] = 1, 2, 3 arr[0] = 3 arr[1] = 1, 2, 3 이런형태로 출력해주면 순서대로 출력 될것임. import.. 2021. 5. 19.
[파이썬] 백준 1935 후위표기식2 python 파이썬으로 풀어본 백준 1935 후위표기식 2 www.acmicpc.net/problem/1935 1935번: 후위 표기식2 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이 www.acmicpc.net 후위표기식 1 문제 와 달리 이번 문제는 구현이 조금 더 쉬웠다. 주의해야할 부분은 알파벳에 값을 직접 대입해서 사용하는 부분인데. 입력 값만 보고 A는 무조건 1이라는 착각을 하면 안된다. 대신 파이썬의 내장함수 ord() 를 사용해서 입력 값배열에 접근해서 대입해야한다. 그리고 마지막으로 소숫점 2자리수 까지 출력하는것도 잊으면 안됨 import st.. 2021. 5. 7.
[파이썬] 백준1918 후위표기식 python www.acmicpc.net/problem/1918 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식 www.acmicpc.net 우선 후위표기식에 대해서 이해가 필요함. 그리고 사칙연산의 우선순위에 대해서 알아 둬야한다. 문제에서는 +, -, *, /, (, ) 와 알파벳 대문자만 사용한다. 우선순위 1. ( , ) 2. * , / 3. + , - 그리고 같은 우선순위에 있는 연산자의 경우 왼쪽의 연산자부터 처리하면 된다. 스택을 활용해서 구현할 수 있는데. 문제에서는 알파벳을 사용하므로 isalpha() 메서드를 사용해서 알파.. 2021. 5. 7.