νλ‘κ·Έλλ¨Έμ€ λ¬Έμ νμ΄ - μμ°
λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦ / κ³΅κ° λ³΅μ‘λ
π λ΄κ° μμ±ν νμ΄
function solution(d, budget) {
d.sort((a, b) => b - a);
let count = 0;
let pop = d.pop();
while (budget >= pop) {
budget = budget - pop;
pop = d.pop();
count++;
}
return count;
}
μ΄μ 곡λΆμ μ΄μ΄μ
κ°μ€μΉ κ·Έλν
λ₯Ό μ΄μ©ν΄ μ΅λ¨ κ²½λ‘ λ¬Έμ
λ₯Ό νΈλ μκ³ λ¦¬μ¦
κ°μ€μΉλ₯Ό κ° λμμμ λ€λ₯Έ λμλ‘ κ° λ μΌλ§λ 빨리 κ° μ μλλλ‘ ννν¨μΌλ‘μ¨, 맀νκ³Ό GPS κΈ°μ μμ μ¬μ©ν μλ μλ€. μ΄λ₯Ό ν΅ν΄ ν μ₯μμμ λ€λ₯Έ μ₯μλ‘ μ΄μ ν λ μ΄λ€ κ²½λ‘λ‘ κ°μΌ ν μ§ κ²°μ ν μ μλ€.
μλμμλ κ°μ€μΉλ₯Ό κ°κ²©μΌλ‘ ννν μμ λ₯Ό μ΄ν΄λ³Ό κ²μ΄λ€.
[ μμ ]
μ νλνλ‘λΆν° λ€λ₯Έ λμλ€κΉμ§μ κ°μ₯ μ λ ΄ν κ²½λ‘λ₯Ό κΈ°λ‘ν΄λΌ
[ μ½λ μ€λͺ ]
μμ μ μ μ νμ¬ μ μ μΌλ‘ νλ€.
νμ¬ μ μ μ μΈμ ν λͺ¨λ μ μ μ νμΈ
ν΄μ, μμ μ μ μΌλ‘λΆν°, μλ €μ§ λͺ¨λ μμΉκΉμ§μ κ°μ€μΉλ₯Ό κ³μ°νκ³ κΈ°λ‘
νλ€.
λ€μ νμ¬ μ μ μ κ²°μ
νλ €λ©΄, μμ μ μ μΌλ‘λΆν° λλ¬ν μ μλ, λ°©λ¬Ένμ§ μμ, κ°μ₯ μ λ ΄ν, μλ €μ§, μ μ μ μ°Ύλλ€.
κ·Έλν λ΄ λͺ¨λ μ μ μ λ°©λ¬Έν λκΉμ§ 1 ~ 3 λ¨κ³λ₯Ό λ°λ³΅νλ€.
pp.292 ~ 294
Rubyλ‘ κ΅¬νλ μ½λ β JavaScriptλ‘ λ³ν
πββοΈ Q1. λ―Έμμ± μ½λλ€. μ€λ₯κ° λ°μνλλ° λ μ΄μ μ΄λ»κ² μμ ν΄μΌ ν μ§ λͺ¨λ₯΄κ² λ€. λ°μν μ€λ₯λ μλμ κ°λ€. (μ½λ μ°Έκ³ )
Uncaught TypeError: Cannot convert undefined or null to object at Function.keys (<anonymous>) at dijkstra (πββοΈ Q1(1)) at πββοΈ Q1(2)
β π‘ μμΈμ μκ² λλ° μ΄λ»κ² κ³ μ³μΌ νλμ§λ₯Ό λͺ¨λ₯΄κ² λ€.
πββοΈ Q2. μ μ€λ₯κ° λ°μν μμΈ κ°μλ° ν΄κ²°μ λͺ»νκ² λ€. (μ½λ μ°Έκ³ )
β π‘ A2 μ°Έκ³
class City {
constructor(name) {
this.name = name;
this.routes = {};
this.visited = false;
}
add_route(city, price_info) {
this.routes[city] = price_info;
}
}
// κ°μ€ κ·Έλν λ§λ€κΈ°
const atlanta = new City('atlanta');
const boston = new City('boston');
const chicago = new City('chicago');
const denver = new City('denver');
const elpaso = new City('elpaso');
atlanta.add_route(boston, 100);
atlanta.add_route(denver, 160);
boston.add_route(chicago, 120);
boston.add_route(denver, 180);
chicago.add_route(elpaso, 80);
denver.add_route(chicago, 40);
denver.add_route(elpaso, 140);
elpaso.add_route(boston, 100);
/* πββοΈ Q2. μ΄λ κ² μ΄ ν μ½μ μ°½μ atlantaλ₯Ό μΆλ ₯νλκΉ {'[object Object]': 160}μ΄ λμ¨λ€.
μ¬μ§μ΄ atlanta.routes[chicago]λ₯Ό μΆλ ₯ν΄λ 160μ΄ λμ¨λ€.
ν
μ€νΈ ν΄λ³΄λκΉ atlanta.routes[μ€λΈμ νΈ]λ₯Ό μΆλ ₯νλ©΄ μ΄λ€ μ€λΈμ νΈκ±΄ κ°μ 160μ΄ λμ¨λ€.
μ΄κ² μ μ΄λ κ² λλ κ±΄μ§ λͺ¨λ₯΄κ² λ€. */
/* κ·Έλμ λ°μ λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦ μ½λλ μλ μ£Όμμ²λΌ boston.name, denver.nameμ΄λΌκ³ μ΄ μνλ‘ κ΅¬νμ νλ€.
κ·Όλ° μ΄λ²μ μλ§λ μ΄κ² λλ¬Έμ λ°μμ μ€λ₯κ° λ¨λ κ±° κ°λ€...*/
// atlanta.add_route(boston.name, 100);
// atlanta.add_route(denver.name, 160);
/* π‘ A2. add_route ν¨μλ 첫 λ²μ§Έ μΈμλ‘ cityλ₯Ό λ°λλ° μ ν΄μ£Όλ κ°μ΄ λ¬Έμμ΄μ΄ μλ objectλΌμ μλ¬κ° μκΈ΄ κ²
λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μ΄λ μ ν μκ΄μλ μλ¬μ...γ
γ
*/
// π₯ λ€μ΅μ€νΈλΌμ μκ³ λ¦¬μ¦ (μ΄λ λμμμ λ€λ₯Έ λμλ€λ‘ κ°λ κ°κ°μ κ°μ₯ μ λ ΄ν κ²½λ‘ κ΅¬νκΈ°)
function dijkstra(starting_city, other_cities) {
// λμ : [μμ λμλ‘λΆν° μ΄ λμκΉμ§μ κ°μ₯ μ λ ΄ν κ°κ²©, ν΄λΉ κ²½λ‘μμ μ΄ λμ λ°λ‘ μ μ λ€λ₯΄λ λμ]
const routes_from_city = {};
// μμ λμμμ μμ λμλ‘ κ°λ λΉμ©μ 0
routes_from_city[starting_city] = [0, starting_city];
// λ€λ₯Έ λμλ€ λ°μ΄ν° μ΄κΈ°ν (μμ λμ μΈμ λ€λ₯Έ λμλ€λ‘ κ°λ λΉμ©κ³Ό κ²½λ‘λ μμ§ μλ €μ§μ§ μμμΌλ―λ‘ μΌλ¨ 무νλ κ° ν λΉ)
other_cities.forEach(city => routes_from_city[city] = [Infinity, null]);
console.log(routes_from_city);
// λ°©λ¬Ένλ λμ κΈ°λ‘
const visited_cities = [];
// μμ λμλ₯Ό νμ¬ λμ[μ μ ]λ‘ μ§μ
let curr_city = starting_city;
// κ° λμλ₯Ό λ°©λ¬Ένλ 루ν μμ
while(curr_city) {
visited_cities.push(curr_city);
// νμ¬ λμλ‘λΆν° κ° κ²½λ‘λ₯Ό νμΈ
Object.keys(curr_city.routes).forEach(city => { // πββοΈ Q1(1)
if (routes_from_city[city][0] > curr_city.routes[city] + routes_from_city[curr_city][0]) {
routes_from_city[city] = [curr_city.routes[city] + routes_from_city[curr_city][0], curr_city]
}
});
// λ€μμΌλ‘ λ°©λ¬Έν λμ κ²°μ
curr_city = null;
let cheapest_route_from_curr_city = Infinity;
Object.keys(routes_from_city).forEach(city => {
if (routes_from_city[city][0] < cheapest_route_from_curr_city && !visited_cities.includes(city)) {
cheapest_route_from_curr_city = routes_from_city[city][0];
curr_city = city;
}
});
}
return routes_from_city;
}
const route = dijkstra(atlanta, ['boston', 'chicago', 'denver', 'elpaso']);
// πββοΈ Q1(2)
Object.keys(route).forEach(city => console.log(`city: ${city}, price_info: ${route[city][0]}`));
π μκ° λ³΅μ‘λ : μλ£ κ΅¬μ‘°λ μκ³ λ¦¬μ¦μ΄ μλ£κΉμ§ μΌλ§λ λ§μ
λ¨κ³
κ° κ±Έλ¦¬λλπ κ³΅κ° λ³΅μ‘λ : μλ£ κ΅¬μ‘°λ μκ³ λ¦¬μ¦μ΄ μλ£κΉμ§ μΌλ§λ λ§μ
λ©λͺ¨λ¦¬
λ₯Ό μλΉνλλ
π‘ μκ³ λ¦¬μ¦μ ν¨μ¨μ±
μκ³ λ¦¬μ¦μ μλ
λ°μ΄ν° μμκ° Nκ°μΌ λ, μκ³ λ¦¬μ¦μ Nμ λΉλ‘νλ μ°μ° λ¨κ³κ° κ±Έλ¦°λ€.
μκ³ λ¦¬μ¦μ μ΅λ μΌλ§λ λ§μ 곡κ°μ΄ νμνκ°
λ°μ΄ν° μμκ° Nκ°μΌ λ, μκ³ λ¦¬μ¦μ λ©λͺ¨λ¦¬ λ΄ μΆκ°λ‘ λ€μ΄ μλ
λ°μ΄ν° μμ μμ λΉλ‘ν΄μ 곡κ°μ μλͺ¨νλ€.
π‘ λ€μ΄κ°κΈ° μ μ μμ, 'μ¬κΈ°μλ' κ³΅κ° λ³΅μ‘λλ₯Ό κ³μ°ν λ μΆκ°λ‘ μλΉλλ λ©λͺ¨λ¦¬(보쑰 곡κ°)λ§μ κ³ λ €
νλ€. μ¦, μλ λ°μ΄ν°λ κ³μ° μ ν¬ν¨νμ§ μλλ€.
function makeUpperCase(arr) {
const newArr = [];
for (let i = 0; i < arr.length; i++) {
newArr[i] = arr[i].toUpperCase();
}
return newArr;
}
μ ν¨μλ μμ Nκ°λ₯Ό λ°μ μμ Nκ°μΈ μλ‘μ΄ λ°°μ΄μ μμ±νλ€.
μλ₯Ό λ€μ΄, μλ λ°°μ΄μ μμκ° 5κ°, 10κ°μ΄λ©΄ μμμ κ°μκ° 5κ°, 10κ°μΈ μλ‘μ΄ λ°°μ΄μ μμ±νλ€.
λ°λΌμ, κ³΅κ° ν¨μ¨μ±μ O(N)μ΄λ€.
λ°μ΄ν°μ ν¬κΈ°κ° Nκ°λ©΄, μΆκ°λ‘ μλΉνλ 곡κ°μ Nμ΄ λλ€.
function makeUpperCase(arr) {
for (let i = 0; i < arr.length; i++) {
arr[i] = arr[i].toUpperCase();
}
return arr;
}
μ ν¨μλ μ λ³μλ μ λ°°μ΄μ μμ±νμ§ μλλ€.
μλ₯Ό λ€μ΄, μλ λ°°μ΄μ μμκ° 5κ°λ 10κ°λ μλ λ°°μ΄ μΈμ μ΄λ€ λ©λͺ¨λ¦¬λ μ°μ§ μλλ€.
λ°λΌμ, κ³΅κ° ν¨μ¨μ±μ O(1)μ΄λ€.
λ°μ΄ν°μ ν¬κΈ°μ μκ΄μμ΄, μΆκ°λ‘ μλΉνλ 곡κ°μ 0μΌλ‘ νμ κ°λ€.
μκ° λ³΅μ‘λ
μμ O(1)μ, λ°μ΄ν°μ ν¬κΈ°μ μκ΄μμ΄, μκ³ λ¦¬μ¦ μλ
κ° μμλΌλ λ»μ΄λ€. κ³΅κ° λ³΅μ‘λ
μμ O(1)μ, λ°μ΄ν°μ ν¬κΈ°μ μκ΄μμ΄, μκ³ λ¦¬μ¦μ΄ μλͺ¨νλ λ©λͺ¨λ¦¬
κ° μμλΌλ λ»μ΄λ€.
[ μμ ]
λ°°μ΄μ μ€λ³΅ κ°μ΄ μλμ§ νμΈνλ μ½λ
// λ²μ 1
function hasDuplicateValue(arr) {
const newArr = [];
for (let i = 0; i < arr.length - 1; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
return true;
}
}
}
return false;
}
// λ²μ 2
function hasDuplicateValue(arr) {
const checkedValue = [];
for (let i = 0; i < arr.length; i++) {
if (checkedValue[arr[i]] === undefined) {
checkedValue[arr[i]] = 1;
} else {
return true;
}
}
return false;
}
ν¨μ¨μ± λΉκ΅
μκ° λ³΅μ‘λ | κ³΅κ° λ³΅μ‘λ | |
---|---|---|
λ²μ 1 | O(N^2) | O(1) |
λ²μ 2 | O(N) | O(N) |
μν©μ λ°λΌ μλ§μ λ²μ μ κ³¨λΌ μ¨μΌ νλ€