kohigowild
221018 :: [ํ๋ก๊ทธ๋๋จธ์ค] 2016๋ , ์์ฅ, ๋คํธ์ํฌ ๋ณธ๋ฌธ
2016๋
๐พ ๋ฌธ์ ์ค๋ช
2016๋ 1์ 1์ผ์ ๊ธ์์ผ์ ๋๋ค. 2016๋ a์ b์ผ์ ๋ฌด์จ ์์ผ์ผ๊น์? ๋ ์ a ,b๋ฅผ ์ ๋ ฅ๋ฐ์ 2016๋ a์ b์ผ์ด ๋ฌด์จ ์์ผ์ธ์ง ๋ฆฌํดํ๋ ํจ์, solution์ ์์ฑํ์ธ์.
์์ผ์ ์ด๋ฆ์ ์ผ์์ผ๋ถํฐ ํ ์์ผ๊น์ง ๊ฐ๊ฐ SUN,MON,TUE,WED,THU,FRI,SAT์ ๋๋ค.
์๋ฅผ ๋ค์ด a=5, b=24๋ผ๋ฉด 5์ 24์ผ์ ํ์์ผ์ด๋ฏ๋ก ๋ฌธ์์ด "TUE"๋ฅผ ๋ฐํํ์ธ์.
๐พ ์ ํ ์ฌํญ
- 2016๋ ์ ์ค๋ ์ ๋๋ค.
- 2016๋ a์ b์ผ์ ์ค์ ๋ก ์๋ ๋ ์ ๋๋ค. (13์ 26์ผ์ด๋ 2์ 45์ผ๊ฐ์ ๋ ์ง๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค)
๐พ ๋์ ๋ต์
function solution(a, b) {
return new Date(2016, a - 1, b).toString().split(" ")[0].toUpperCase();
}
- Date ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ํ์ดํ์๋ค. a ์๋ฆฌ์ ๊ฒฝ์ฐ monthIndex์ ์๋ฆฌ์ด๋ฏ๋ก (ex:: 0 - Jan, 1 - Feb, 2 - Mar...) a์ -1์ ํด ์ฃผ์ด์ผ ์ํ๋ ๊ฐ์ ์ป์ ์ ์๋ค.
- new Date(2016, 3, 12).toString() // Output: Tue Apr 12 2016 00:00:00 GMT+0900 (๋ํ๋ฏผ๊ตญ ํ์ค์)
- ์์ผ๋ง ๋๋ฌธ์ ๋ฐํํ๋ฉด ๋๋ฏ๋ก ๋์ด์ฐ๊ธฐ ๋จ์๋ก ์ชผ๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ ๋ค ์ธ๋ฑ์ค 0 ๊ฐ์ ๋๋ฌธ์ ๋ณํ ํ ๋ฐํํ๋ค.
๐พ ๋ค๋ฅธ ์ฌ๋์ ํ์ด
function solution(a, b) {
const monthDay = [31,29,31,30,31,30,31,31,30,31,30,31]
const weekDay = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]
let days = b
for(let i=0 ; i<a-1 ; i++)
days += monthDay[i];
return weekDay[days%7];
}
function solution(a, b) {
var answer = '';
let days= ['THU','FRI','SAT','SUN','MON','TUE','WED'];
let months = {
29:[2],
30:[4,6,9,11],
31:[1,3,5,7,8,10,12]
}
let sum = 0;
for (let key in months){
months[key].forEach(el => {
if (el < a){
sum = sum + Number(key);
}
})
}
let checkedNum = (sum+b)%7;
answer = days[checkedNum]
return answer;
}
- Date ๊ฐ์ฒด๋ฅผ ์ฐ์ง ์์ ํ์ด
- ๋ ๋ฒ์งธ ๋ต์์ months ๊ฐ์ฒด๋ฅผ ๊น๋ํ๊ฒ ์ ๊ตฌํํ ๊ฒ ๊ฐ๋ค
์์ฅ
๐พ ๋ฌธ์ ์ค๋ช
์คํ์ด๋ค์ ๋งค์ผ ๋ค๋ฅธ ์ท์ ์กฐํฉํ์ฌ ์ ์ด ์์ ์ ์์ฅํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์คํ์ด๊ฐ ๊ฐ์ง ์ท์ด ์๋์ ๊ฐ๊ณ ์ค๋ ์คํ์ด๊ฐ ๋๊ทธ๋ ์๊ฒฝ, ๊ธด ์ฝํธ, ํ๋์ ํฐ์ ์ธ ๋ฅผ ์ ์๋ค๋ฉด ๋ค์๋ ์ ์ฒญ๋ฐ์ง๋ฅผ ์ถ๊ฐ๋ก ์ ๊ฑฐ๋ ๋๊ทธ๋ ์๊ฒฝ ๋์ ๊ฒ์ ์ ๊ธ๋ผ์ค๋ฅผ ์ฐฉ์ฉํ๊ฑฐ๋ ํด์ผ ํฉ๋๋ค.
์ผ๊ตด ๋๊ทธ๋ ์๊ฒฝ, ๊ฒ์ ์ ๊ธ๋ผ์ค ์์ ํ๋์ ํฐ์ ์ธ ํ์ ์ฒญ๋ฐ์ง ๊ฒ์ท ๊ธด ์ฝํธ ์คํ์ด๊ฐ ๊ฐ์ง ์์๋ค์ด ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด clothes๊ฐ ์ฃผ์ด์ง ๋ ์๋ก ๋ค๋ฅธ ์ท์ ์กฐํฉ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐พ ์ ํ ์ฌํญ
- clothes์ ๊ฐ ํ์ [์์์ ์ด๋ฆ, ์์์ ์ข ๋ฅ]๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ์คํ์ด๊ฐ ๊ฐ์ง ์์์ ์๋ 1๊ฐ ์ด์ 30๊ฐ ์ดํ์ ๋๋ค.
- ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ์์์ ์กด์ฌํ์ง ์์ต๋๋ค.
- clothes์ ๋ชจ๋ ์์๋ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ๋ชจ๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ 1 ์ด์ 20 ์ดํ์ธ ์์ฐ์์ด๊ณ ์ํ๋ฒณ ์๋ฌธ์ ๋๋ '_' ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ์คํ์ด๋ ํ๋ฃจ์ ์ต์ ํ ๊ฐ์ ์์์ ์ ์ต๋๋ค.
๐พ ๋์ ๋ต์
function solution(clothes) {
let obj = {};
let cnt = 1;
for (let i = 0; i < clothes.length; i++) {
if (obj[clothes[i][1]] >= 1) {
obj[clothes[i][1]] += 1;
} else {
obj[clothes[i][1]] = 1;
}
}
for (let i = 0; i < obj.length; i++) {
cnt *= obj[key] + 1;
}
return cnt - 1;
}
- ์ฒซ ๋ต์, ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค์์ 0์ด ๋์ค๋ ๊ฑธ ๋ณด๋๊น for๋ฌธ์ด ์๋๋๋ก ์์ฑ์ด ์ ๋ ๊ฒ ๊ฐ์
- ๋น ๊ฐ์ฒด obj ์์ฑ ํ ์ท์ ์ข ๋ฅ(clothes[i][1])๋ฅผ key๋ผ๊ณ ํ๊ณ , ๊ฐ์ฒด์ ๋์ผ key๊ฐ ํ ๊ฐ ์ด์์ด๋ฉด 1์ ๋ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด 1๋ก ๋ง๋ ๋ค.
- ์๋ฅผ ๋ค์ด, ์ผ๊ตด 3, ์์ 2, ํ์ 2์ธ ๊ฒฝ์ฐ ์ท์ ์ ๋ ๊ฒฝ์ฐ์ ์๋ (3 + 1) * (2 + 1) * (2 + 1)์ด ๋๋ค. +1์ ์๋ฌด๊ฒ๋ ์ ์ง ์๋ ๊ฒฝ์ฐ์ด๋ค. ๋ฐ๋ผ์ key๊ฐ์ 1์ ๋ํด์ ๋ชจ๋ ๊ณฑํด์ฃผ๋ฉด ๋จ.
- ์คํ์ด๋ ์ต์ ํ ๊ฐ์ ์ท์ ์ ์ผ๋ฏ๋ก ๋์ ๋ cnt ๊ฐ์์ 1์ (๋ชจ๋ ์ท์ ์ ์ง ์์ ๊ฒฝ์ฐ) ๋นผ์ ๋ฐํํ๋ค.
function solution(clothes) {
let obj = {};
let cnt = 1;
for (let i = 0; i < clothes.length; i++) {
if (obj[clothes[i][1]] >= 1) {
obj[clothes[i][1]] += 1;
} else {
obj[clothes[i][1]] = 1;
}
}
for (let key in obj) {
cnt *= obj[key] + 1;
}
return cnt - 1;
}
- ํ ์คํธ ์ผ์ด์ค ๋ชจ๋ ํต๊ณผํ ๋ต์
- ๊ฐ์ฒด ์ ๊ทผ ์์๋ for in ๋ฌธ์ ์จ์ผ ํจ!!
๐พ ๋ค๋ฅธ ์ฌ๋์ ํ์ด
function solution(clothes) {
return Object.values(clothes.reduce((obj, t)=> {
obj[t[1]] = obj[t[1]] ? obj[t[1]] + 1 : 1;
return obj;
} , {})).reduce((a,b)=> a*(b+1), 1)-1;
}
- ์ท์ ์ข ๋ฅ(obj[t[1]])๋ก ๊ฐ์ ๋์ ํ๊ณ , ๋์ ํ ๊ฐ + 1์ ๋ชจ๋ ๊ณฑํ ๋ค 1์ ๋นผ์ ๋ฆฌํด
๋คํธ์ํฌ
๐พ ๋ฌธ์ ์ค๋ช
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ A์ ์ปดํจํฐ B๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๊ณ , ์ปดํจํฐ B์ ์ปดํจํฐ C๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋ ์ปดํจํฐ A์ ์ปดํจํฐ C๋ ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํจํฐ A, B, C๋ ๋ชจ๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ปดํจํฐ์ ๊ฐ์ n, ์ฐ๊ฒฐ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด computers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋คํธ์ํฌ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์์ค.
๐พ ์ ํ ์ฌํญ
- ์ปดํจํฐ์ ๊ฐ์ n์ 1 ์ด์ 200 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ๊ฐ ์ปดํจํฐ๋ 0๋ถํฐ n-1์ธ ์ ์๋ก ํํํฉ๋๋ค.
- i๋ฒ ์ปดํจํฐ์ j๋ฒ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด computers[i][j]๋ฅผ 1๋ก ํํํฉ๋๋ค.
- computer[i][i]๋ ํญ์ 1์ ๋๋ค.
์ฑ ์ ์ฝ์ ๋๋ณด๋ค ์ฑ ํ ๊ถ ์ฝ์ ๋์ด ๋ฌด์ญ๋ค ํจ
์์ ์ ์ปดํจํฐ์ผ๋ฐ ๊ณผ๋ชฉ ๊ณต๋ถํ ๋ DFS BFS ํ์ ์์ ๊ฐ์ ๊ฑฐ ์ธ์ด ์ ์ด ์์ด์ ๋์ถฉ ๊ทธ๊ฒ ๋ญ์ง๋ ์
๋ด๊ฐ ์ง๊ธ ์ฑ ํ ๊ถ ์ฝ์ ๋์ธ ๊ฑฐ์
์ด ๋ฌธ์ ๋ฅผ ํตํด ์ฑ ๋ ๊ถ ์ ๋๋ ์ฝ์ ๋์ด ๋ ๊ฒ์ด๋ค
๊ทธ๋ํ ํ์
- ํ๋์ ์ ์ ์ผ๋ก๋ถํฐ ์์ํ์ฌ ์ฐจ๋ก๋๋ก ๋ชจ๋ ์ ์ ๋ค์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๋ ๊ฒ
๊น์ด ์ฐ์ ํ์ (DFS)
- ๋ฃจํธ ๋ ธํธ(ํน์ ๋ค๋ฅธ ์์์ ๋ ธ๋)์์ ์์ํด์ ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ ๋ฐฉ๋ฒ. ์ฆ, ๋๊ฒ ํ์ํ๊ธฐ ์ ์ ๊น๊ฒ ํ์ํ๋ ๊ฒ์ด๋ค.
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ์ด ๋ฐฉ๋ฒ์ ์ ํํ๋ค.
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ๋ ๊ทธ๋ํ ํ์์ ๊ฒฝ์ฐ, ์ด๋ค ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋์ง ์ฌ๋ถ๋ฅผ ๋ฐ๋์ ๊ฒ์ฌํด์ผ ํ๋ค. ์ด๋ฅผ ๊ฒ์ฌํ์ง ์์ ๊ฒฝ์ฐ ๋ฌดํ๋ฃจํ์ ๋น ์ง ์ํ์ด ์๋ค.
๊ตฌํ ์ฝ๋
const graph = {
A: ["B", "C"],
B: ["A", "D"],
C: ["A", "G", "H", "I"],
D: ["B", "E", "F"],
E: ["D"],
F: ["D"],
G: ["C"],
H: ["C"],
I: ["C", "J"],
J: ["I"]
};
const DFS = (graph, startNode) => {
const visited = []; // ํ์์ ๋ง์น ๋
ธ๋๋ค
let needVisit = []; // ํ์ํด์ผํ ๋
ธ๋๋ค
needVisit.push(startNode); // ๋
ธ๋ ํ์ ์์
while (needVisit.length !== 0) { // ํ์ํด์ผํ ๋
ธ๋๊ฐ ๋จ์์๋ค๋ฉด
const node = needVisit.shift(); // queue์ด๊ธฐ ๋๋ฌธ์ ์ ์
์ ์ถ, shift()๋ฅผ ์ฌ์ฉํ๋ค.
if (!visited.includes(node)) { // ํด๋น ๋
ธ๋๊ฐ ํ์๋ ์ ์๋ค๋ฉด
visited.push(node);
needVisit = [...graph[node], ...needVisit];
}
}
return visited;
};
console.log(DFS(graph, "A"));
// ["A", "B", "D", "E", "F", "C", "G", "H", "I", "J"]
๋ ํผ๋ฐ์ค
https://gmlwjd9405.github.io/2018/08/14/algorithm-dfs.html
https://velog.io/@sangbooom/JS-BFS-DFS
๐พ ๋์ ๋ต์
function solution(n, computers) {
let network = 0;
let visited = Array.from({ length: n }, () => false);
function dfs(idx) {
visited[idx] = true;
for (let i = 0; i < computers[idx].length; i++) {
if (computers[idx][i] == 1 && !visited[i]) {
dfs(i);
}
}
}
for (let i = 0; i < computers.length; i++) {
if (!visited[i]) {
dfs(i);
network++;
}
}
return network;
}
- ๋ด ๋จธ๋ฆฌ์์ ๋์จ ๊ฑด ์๋๊ณ ... ๊ตฌ๊ธ๋ง์ ๋์์ ๋ง์ด ๋น๋ฆผ ์์งํ ๋์ ๋ต์์ด๋ผ๊ณ ํ๊ธฐ๋ ๋ฏผ๋ง์๋ฌ์
- ๋ฐฉ๋ฌธ์ ๋ง์น ์ปดํจํฐ๋ฅผ ์ฒดํฌํ๊ธฐ ์ํด ์ปดํจํฐ ๊ฐ์๋งํผ์ ๊ธธ์ด์ ๋ฐฐ์ด์ ์ ์ธ ํ ๋ฐฐ์ด์ ๊ฐ๋ค์ ๋ชจ๋ false๋ก ๋๋ค.
- dfs ํจ์๋ฅผ ํตํด ์์ ์ปดํจํฐ๋ก๋ถํฐ ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ์ปดํจํฐ๋ฅผ ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ฉฐ ํด๋น ์ปดํจํฐ์ visited๋ฅผ true๋ก ๋ฐ๊พผ๋ค.
- ์๋ก์ด ๋คํธ์ํฌ๋ฅผ ์์ฑํ ๋๋ง๋ค ์ ๋ต์ 1 ์ฆ๊ฐ์ํจ๋ค.
์คํธ๋ผ ๊ทธ๋ ๋จ ๋ง์ด์ง
๋ธ๋ก๊ทธ ๋ช ๊ฐ ์ฐพ์๋ณด๋๊น ์ด ๋ฌธ์ ๊ฐ DFS ์ ์์ด๋ผ๊ณ ํ๋๋ฐ
์์งํ ์ด๊ฑด ๋๋ฌด ์ด๋ ค์ ๊ณ ๊ทธ๋๋ ๋น๊ต์ ๋ง๋งํด ๋ณด์ด๋ ๋ฌธ์ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ํ์ด๋ด์ผ๊ฒ ๋ค