Animated Hello Kitty Wink

๐Ÿถ๐Ÿพ

    [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..