๐ถ๐พ

[js] localStorage์ ์ ์ฅ & login
localStorage ? - localStorage์ ์น ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๊ธฐ๋ฅ์ผ๋ก, ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์๋ ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ํด์ ์ ์งํ ์ ์๋ค. firebase๋ฅผ ํตํด ๋ก๊ทธ์ธ & ํ์๊ฐ์ ์ ๊ตฌํํ๊ณ , ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ localStorage์ ์ ์ฅํ๋ ๋ฐฉ์์ ์ด์ฉํด๋ณด์๋ค. ์ฐ์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ localStorage์ ์ ์ฅํ๊ธฐ ์ํด์๋ localStorage.setItem(key, value)๋ฅผ ์ด์ฉํ๋ค. const handleSubmit = (e) => { e.preventDefault(); signInWithEmailAndPassword(auth, id, password) .then((userCredential) => { const user = userCre..

[html] Open Graph
Open Graph ? - sns๋ฅผ ํตํด์ ์ฌ์ดํธ๊ฐ ๊ณต์ ๋ ๋, ์ฌ์ดํธ์ ๋ํ ๋ฉํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ํ๊ทธ index.html ์ด์ธ ๋ค๋ฅธ property๋ https://ogp.me/ ์์ ํ์ธ ๊ฐ๋ฅ +) ์นด์นด์ค์์ ๋ฐ๋ก ๋ณ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ ์นด์นด์ค ๊ฐ๋ฐ์ ์ฌ์ดํธ > ๋๊ตฌ > ๋๋ฒ๊ฑฐ ๋๊ตฌ > ๊ณต์ ๋๋ฒ๊ฑฐ > URL ์ ๋ ฅ์ ํตํด ์บ์ ์ญ์

[react] Firebase๋ก ํ๋ก์ ํธ ๋ฐฐํฌ
https://firebase.google.com/?hl=ko Firebase | Google’s Mobile and Web App Development Platform ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์๊ฐ ์ข์ํ ๋งํ ์ฑ๊ณผ ๊ฒ์์ ๋น๋ํ๋๋ก ์ง์ํ๋ Google์ ๋ชจ๋ฐ์ผ ๋ฐ ์น ์ฑ ๊ฐ๋ฐ ํ๋ซํผ์ธ Firebase์ ๋ํด ์์๋ณด์ธ์. firebase.google.com ํ๋ก์ ํธ ์์ฑ ํ ์ ์นดํ ๊ณ ๋ฆฌ์์ ๋น๋ > ํธ์คํ ํด๋ฆญ 1. Firebase CLI ์ค์น $ npm install -g firebase-tools ํฐ๋ฏธ๋์์ ์คํ 2. ํ๋ก์ ํธ ์ด๊ธฐํ $ firebase login $ firebase init vscode์์ ์คํ (ํฐ๋ฏธ๋์์ ์คํ์ rootํด๋๊น์ง ๊ฐ์ ์คํ) firebase init (๋ฐ๋์ root ํด๋์..

[react] useParams() - ํ๋ผ๋ฏธํฐ ๊ฐ์ ธ์ค๊ธฐ
...URL/edit/1 edit์ pathname, 1์ parameter pathname์ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ useLocation(), parameter๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ useParams()๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ฌ์ฉ์ ์๋ ๋ฐ๋์ ๋ผ์ฐํฐ๊ฐ ์ค์น๋์ด ์์ด์ผํ๋ค. (npm install react-router-dom) useParams() ์ฌ์ฉ import { useParams } from "react-router-dom"; const Edit = () => { const { id } = useParams(); return ( ) } export default Edit;โ

[react] useEffect - Lifecycle ์ ์ดํ๊ธฐ
react์์ Lifecycle์ด๋ผ๊ณ ํ๋ฉด mount, update, unmount๋ก ๋๋ ์ ์๋ค. mount - ํ๋ฉด์ ๋ํ๋จ update - ์ ๋ฐ์ดํธ, ๋ฆฌ๋๋ unmount - ํ๋ฉด์์ ์ฌ๋ผ์ง useEffectํจ์๋ react hook์ผ๋ก ํด๋์คํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์์๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํจ์ํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์๊ฒํ๋ค. useEffect(function, deps) ํํ๋ก 1. mount ์์ ์ ์คํ useEffect(() => { console.log("mount!"); },[]); - deps๊ฐ ๋น ๋ฐฐ์ด ์ผ ๊ฒฝ์ฐ mount ์์ ์ ์ฝ๋ฐฑํจ์ ์คํ 2. update ๋๋ ์๊ฐ ์คํ useEffect(() => { console.log("update!"); }); useEffect(()..

[js] sort()
js์๋ ๊ธฐ์กด ๋ค๋ฅธ ์ธ์ด๋ค์ฒ๋ผ sort() ํจ์๊ฐ ์กด์ฌํ๋๋ฐ js์์ ๊ทธ๋ฅ sort()๋ฅผ ์ธ ๊ฒฝ์ฐ ๋ฐฐ์ด ์ ์์๋ฅผ ๋ชจ๋ '๋ฌธ์์ด'๋ก ์ธ์ํ๋ค๋ ์ .. ! ํ๋ก๊ทธ๋๋จธ์ค K๋ฒ์งธ์ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ํ ์คํธ 2๋ฒ์์ ์๊พธ ์คํจํด์ ์ ํ๋ ธ์ง ์ถ์๋๋ฐ array = [10,2] commands = [[1, 2, 1]] ์ผ ๊ฒฝ์ฐ ๋ต์ด [2]๊ฐ ๋์์ผํ๋๋ฐ sort()๋ฅผ sort((a,b) => a-b);๋ก ์ํ๊ณ ๊ทธ๋ฅ ์ธ ๊ฒฝ์ฐ ๋ฌธ์์ด๋ก ์ธ์ํด [10]์ด ๋ต์ผ๋ก ๋์ ํ๋ ธ๋ ๊ฒ์ด๋ค .. ! ๐ ์ซ์๋ฅผ ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์ ํ๊ณ ์ถ์ ๋๋ sort ํจ์์์ ๋ฐ๋ก ๋ช ์ํด์ค์ผํ๋ค /* ๊ทธ๋ฅ sort() ์ฌ์ฉ (๋ฌธ์์ด๋ก ์ธ์) */ arr = [10,2]; arr.sort(); // [10,2] /* ์ซ์๋ก sort() ์ค๋ฆ..

[spring] ์ปดํฌ๋ํธ ์ค์บ
์คํ๋ง ๋น์ด ์์ญ, ์๋ฐฑ๊ฐ๊ฐ ๋ ๊ฒฝ์ฐ ์ค์ ์ ๋ณด(Appconfig)์ ์ผ์ผ์ด ๋ฑ๋กํ๊ธฐ ๊ท์ฐฎ์์ง๋ ๋ฌธ์ ๋๋ฌธ์ ์คํ๋ง์์๋ ์ค์ ์ ๋ณด๊ฐ ์์ด๋ ์๋์ผ๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ ์ปดํฌ๋ํธ ์ค์บ์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค ! ๊ทธ๋ฆฌ๊ณ ์์กด๊ด๊ณ๋ ์๋์ผ๋ก ์ฃผ์ ํ๋ @Autowired๋ผ๋ ๊ธฐ๋ฅ ๋ํ ์คํ๋ง์์ ์ ๊ณตํ๋ค. ์ปดํฌ๋ํธ ์ค์บ ์ฌ์ฉ ๋ฐฉ๋ฒ @Configuration @ComponentScan public class Appconfig {} @ComponentScan์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ธฐ์กด๊ณผ๋ค๋ฅด๊ฒ @Bean์ผ๋ก ํด๋์ค๋ฅผ ๋ฑ๋กํ์ง ์๊ณ ์ค์บ์ ๋์์ด ๋๋ ํด๋์ค์ @Component๋ง ๋ถ์ฌ์ค ๋ค, ์์กด๊ด๊ณ ์ฃผ์ ์ด ํ์ํ ๊ณณ์๋ @Autowired ์ด๋ ธํ ์ด์ ๋ง ๋ถ์ฌ์ฃผ๋ฉด ์คํ๋ง์ ์๋์ผ๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํด์ค๋ค @Component..

[Java] ์นด์ดํ ์ ๋ ฌ
๋ฐฑ์ค 10989๋ฒ ๋ฌธ์ ๋ฅผ ํ ๋, ๊ทธ๋ฅ Arrays.sort()๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์์๋ค. ์ดํ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ป๊ฒ ํ์๋ ์ฐพ์๋ณด๊ณ ์นด์ดํ ์ ๋ ฌ์ ์ด์ฉํด ๋ฌธ์ ํ์ด๋ฅผ ๋ค์ ํ๊ฒ ๋์๋ค. Arrays.sort()์ BuffedReader๋ฑ์ ์ฌ์ฉํ์ ๋ ๋ฉ๋ชจ๋ฆฌ 345476KB, ์๊ฐ์ด 2616ms ๊ฑธ๋ ธ์๋๋ฐ ์นด์ดํ ์ ๋ ฌ์ ์ด์ฉํด์ ๋ฌธ์ ํ์ด๋ฅผ ํ๋๊น ๋ฉ๋ชจ๋ฆฌ์ ์๊ฐ ๋ชจ๋๊ฐ ์ค์ด๋ค์๋ค. ์ฒ์์ ์นด์ดํ ์ ๋ ฌ์ด ๋ญ์ง ๋ชฐ๋ผ์ ์ดํดํ๋๋ฐ ์๊ฐ์ด ์ข ๊ฑธ๋ ธ์ด์ ! ๊น๋จน๊ธฐ ์ ์ ์ ๋ฆฌํด๋๋ ค๊ณ ํ๋ค. ์นด์ดํ ์ ๋ ฌ์ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ช ๋ฒ ๋์๋์ง๋ฅผ ์ธ์ฃผ๋ ๊ฒ์ด๋ค. ๋ฌธ์ ๋ก ์ดํดํ๋ฉด 5, 2, 3, 1, 4, 2, 3, 5, 1, 7 ์ด ์ ๋ ฅ์ผ๋ก ๋ค์ด์ฌ ๋, int[] arr = new int[10001]; // ์ฃผ์ด์ง๋ ์๋ค์ด..

[Java] StringTokenizer
์ฒ์์ n ์ด๋ผ๋ ํ๋์ ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ๊ณต๋ฐฑ์ผ๋ก ๋๋ ์ง n๊ฐ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ ์ฅํ๋ ๊ฒฝ์ฐ์์ BufferedReader๋ฅผ ์ฌ์ฉํด์ ์ ๋ ฅ๋ฐ๋ค๋ณด๋ ์ ๋ ฅ์ด ์ํฐ๋ก ๊ตฌ๋ถ๋์, StringTokenizer๋ฅผ ์ด์ฉํด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ ๋ ฅ๋ฐ์ผ๋ ค๊ณ ํ๋๋ฐ .. ! ํ์์ ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์ ๋ฆฌํ๊ณ ์ถ์ ํ์ ์ฃผ๋ก ์ ์ธํ๋ ๋ถ๋ถ๋ค์ ์ฝ๋ ์์ชฝ์ผ๋ก ๋ชฐ์ ์ฐ๋ ํ์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int n = Integer.parseInt(br.readLine()); int[] arr = new i..