Skip to content

Commit bea17a8

Browse files
author
gyeong-hyeon-kim
committed
Solved 2 problems
1 parent b197da4 commit bea17a8

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

level-2/괄호-변환.js

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//https://github.com/codeisneverodd/programmers-coding-test
2+
//완벽한 정답이 아닙니다.
3+
//정답 1
4+
function solution(p) {
5+
if(p.length === 0) return p
6+
let bracketCount = 0
7+
let isURight = true
8+
for(let i=0; i<p.length; i++){
9+
bracketCount = p[i] === '(' ? bracketCount + 1 : bracketCount - 1
10+
if(bracketCount < 0) isURight = false
11+
if(bracketCount === 0){
12+
const [u, v] = [p.slice(0,i+1), p.slice(i+1)]
13+
if(isURight){
14+
return u + solution(v)
15+
}else{
16+
let emptyString = '(' + solution(v) + ')'
17+
const slicedReversedString = u
18+
.slice(1,u.length-1)
19+
.split('')
20+
.map(bracket=> bracket === '(' ? ')' : '(')
21+
.join('')
22+
return emptyString + slicedReversedString
23+
}
24+
}
25+
}
26+
}
27+
28+
//정답 2
29+
function solution(p) {
30+
if(p.length === 0){
31+
return p
32+
}else{
33+
const sliceIndex = balancedIndex(p)
34+
const [u, v] = [p.slice(0,sliceIndex+1), p.slice(sliceIndex+1)]
35+
if(isRight(u)){
36+
return u + solution(v)
37+
}else{
38+
let emptyString = '(' + solution(v) + ')'
39+
const slicedReversedString = u
40+
.slice(1,u.length-1)
41+
.split('')
42+
.map(bracket=> bracket === '(' ? ')' : '(')
43+
.join('')
44+
return emptyString + slicedReversedString
45+
}
46+
}
47+
}
48+
const isRight = (str) => {
49+
if(str[0] === ')') return false
50+
let stack = 0
51+
for(let i=0; i<str.length; i++){
52+
stack = str[i] === '(' ? stack + 1 : stack - 1
53+
if(stack < 0) return false
54+
}
55+
return stack === 0
56+
}
57+
const balancedIndex = (str) =>{
58+
let count = 0
59+
for(let i=0; i<str.length; i++){
60+
count = str[i] === '(' ? count + 1 : count - 1
61+
if(count === 0) return i
62+
}
63+
}

level-2/다리를-지나는-트럭.js

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//https://github.com/codeisneverodd/programmers-coding-test
2+
//완벽한 정답이 아닙니다.
3+
//정답 1
4+
function solution(bridge_length, weight, truck_weights) {
5+
let [tick, onBridge, weightOnBridge] = [0, [{weight:0, timeToOut: 0}], 0]
6+
while(onBridge.length > 0 || truck_weights.length > 0){
7+
if(onBridge[0].timeToOut === tick) weightOnBridge -= onBridge.shift().weight
8+
if(weightOnBridge + truck_weights[0] <= weight){
9+
weightOnBridge += truck_weights[0]
10+
onBridge.push({weight: truck_weights.shift(), timeToOut: tick + bridge_length})
11+
}else{
12+
if(onBridge[0]) tick = onBridge[0].timeToOut - 1 // 시간을 줄이는 포인트
13+
}
14+
tick++
15+
}
16+
return tick
17+
}
18+
19+
//정답 2
20+
function solution(bridge_length, weight, truck_weights) {
21+
const bridge = new Array(bridge_length).fill(0)
22+
let tick = 0
23+
do{
24+
tick++
25+
bridge.pop()
26+
bridge.reduce((a,b)=>a+b) + truck_weights[0] <= weight ?
27+
bridge.unshift(truck_weights.shift()) : bridge.unshift(0)
28+
}while(bridge.reduce((a,b)=>a+b) !== 0)
29+
return tick;
30+
}

0 commit comments

Comments
 (0)