Hamutaro - Hamtaro 4

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ 118

[Python] ๋ฐฐ์—ด ์Šฌ๋ผ์ด์‹ฑ

ํŒŒ์ด์ฌ์˜ ๋ฐฐ์—ด ์Šฌ๋ผ์ด์‹ฑ ๊ธฐ๋ณธarr = ['a', 'b', 'c', 'd', 'e'] ํŠน์ •์œ„์น˜๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐarr [ 2: ] --> [ 'c', 'd', 'e' ]์‹œ์ž‘๋ถ€ํ„ฐ ํŠน์ •์œ„์น˜๊นŒ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐarr [ :3 ] --> [ 'a', 'b', 'c', 'd' ]ํŠน์ •์œ„์น˜์— ์žˆ๋Š” ์š”์†Œ ๊ฐ€์ ธ์˜ค๊ธฐarr [ 2:4 ] --> [ 'c', 'd', 'e' ] ๋ฐฐ์—ด ์Šฌ๋ผ์ด์‹ฑ์„ ํ™œ์šฉํ•œ ์˜ˆ์ œ๋ฌธ์ž์—ด my_string, overwrite_string ๊ณผ ์ •์ˆ˜ s ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.๋ฌธ์ž์—ด my_string์˜ ์ธ๋ฑ์Šค s๋ถ€ํ„ฐ overwrite_string์˜ ๊ธธ์ด๋งŒํผ ๋ฌธ์ž์—ด overwrite_string์œผ๋กœ ๋ฐ”๊พผ ๋ฌธ์ž์—ด์„ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑ def solution(my_string, overwrite_stri..

Python 2025.04.30

[Python] ๋Œ€์†Œ๋ฌธ์ž ๋ฐ”๊ฟ”์„œ ์ถœ๋ ฅํ•˜๊ธฐ

ํŒŒ์ด์ฌ์œผ๋กœ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜ํ•˜๊ธฐaBcDeF -> AbCdEf ์ด๋Ÿฐ์‹์œผ๋กœ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜ํ•˜๊ธฐ์ž๋ฐ”์— ๋น„ํ•˜๋ฉด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•œ ํŒŒ์ด์ฌ ์ฝ”๋“œ๊ทธ๋Ÿฐ๋ฐ ๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹คstr = input()answer = ''for i in str: if i.isupper() == True: answer += i.lower() elif i.islower() == True: answer += i.upper()print(answer) ํŒŒ์ด์ฌ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜ swapcaseํŒŒ์ด์ฌ์—๋Š” swapcase ๋ผ๋Š” ๋‚ด์žฅํ•จ์ˆ˜๊ฐ€ ์žˆ์–ด์„œ ์•„์ฃผ ๊ฐ„๋‹จํžˆ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹คstr = input()print(str.swapcase())

Python 2025.04.29

[Python] ๋ฌธ์ž์—ด ์ถœ๋ ฅํ•˜๊ธฐ

print ์ž…๋ ฅ๋ฐ›์€ str์„ n๋ฒˆ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œprint() ์— end="" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ค„๋ฐ”๊ฟˆ์—†์ด ์ถœ๋ ฅํ•จstr, n = input().strip().split(' ')n = int(n)for i in range(n): print(str, end="")   ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ž๋ฐ”๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด...  import java.util.Scanner;public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); String s = ""; int n = sc.nextInt(); ..

Python 2025.03.15

JWT (JSON Web Token)

JWT ๋ž€?JSON Web Token, JSON ๊ฐ์ฒด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์ž๊ธฐ ํฌํ•จ (Self-contained) : ํ† ํฐ์•ˆ์— ์œ ์ € ์ •๋ณด๋‚˜ ๊ถŒํ•œ ๊ฐ™์€ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ง์ ‘ ๋‹ด๊ณ  ์žˆ์–ด์„œ ๋ณ„๋„์˜ ์„ธ์…˜ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”์—†์Œ์„œ๋ช… (Signature) : ํ† ํฐ์€ ์„œ๋ช…๋˜์–ด ์žˆ์–ด์„œ ๋‚ด์šฉ์ด ์œ„์กฐ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ•จStateless : ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ํ•„์š”์—†์ด ํ† ํฐ๋งŒ ํ™•์ธํ•˜๋ฉด ๋จ JWT ๊ตฌ์กฐHeader : ํ† ํฐ์˜ ํƒ€์ž…๊ณผ ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (ex : HS256)Payload : ์œ ์ € ์ •๋ณด ๋ฐ ํด๋ ˆ์ž„(claims)์ด ํฌํ•จ๋˜๋Š” ๋ฐ์ดํ„ฐ (ex : sub, name, exp ๋“ฑ)Signature : ํ—ค๋”์™€ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋น„๋ฐ€ํ‚ค๋กœ ํ•ด์‹ฑํ•œ ์„œ๋ช… JWT util class ์˜ˆ์ œimport io.j..

Security 2025.02.18

[Web] Nginx

Nginx์ฃผ๋กœ ์›น ์„œ๋ฒ„ (Web Server) ๋˜๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ (Reverse Proxy) ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด Nginx ์—ญํ•  1. ์›น ์„œ๋ฒ„ ์—ญํ• ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— www.example.com ์ž…๋ ฅํ•˜๋ฉด,Nginx๋Š” HTML, CSS, JS ๊ฐ™์€ ์ •์  ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์‘๋‹ตํ•ด์ฃผ๋Š” ์—ญํ• Apache ๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์›€2. ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์—ญํ• ์‚ฌ์šฉ์ž -> Nginx -> ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ (Spring, Node.js ๋“ฑ)์‚ฌ์šฉ์ž๋Š” Nginx์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ Nginx๊ฐ€ ๊ทธ ์š”์ฒญ์„ ๋‚ด๋ถ€์˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ด์คŒ๋ฐฑ์—”๋“œ๊ฐ€ ์‘๋‹ตํ•˜๋ฉด ๋‹ค์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋Œ๋ ค์คŒ์ฆ‰, ์ค‘๊ฐ„์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ์ค‘๊ณ„ํ•ด์ฃผ๋Š” ์—ญํ•  3. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์—ญํ• ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ๋‚˜๋ˆ ์ฃผ๋Š” ์—ญํ• ์‚ฌ์šฉ์ž ์š”์ฒญ ↓Nginx (๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ) โ”œโ”€> ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ 1 โ”œโ”€> ๋ฐฑ์—”๋“œ..

Web 2025.01.19

[Security] IAM(Identity and Access Management) ์ธ์ฆ ์„œ๋ฒ„

IAM(Identity and Access Management) ์ธ์ฆ ์„œ๋ฒ„์‚ฌ์šฉ์ž ๋˜๋Š” ์‹œ์Šคํ…œ์˜ ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ํ™•์ธํ•˜๊ณ , ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ํ‰๊ฐ€ํ•˜๋Š” ์—ญํ•  IAM ์ธ์ฆ ์„œ๋ฒ„์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์ธ์ฆ (Authentication)์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ๋•Œ ๋ณธ์ธ์ด ๋ˆ„๊ตฌ์ธ์ง€ ์ฆ๋ช…ํ•˜๋„๋ก ํ•จ์ผ๋ฐ˜์ ์œผ๋กœ ID/๋น„๋ฐ€๋ฒˆํ˜ธ, ์ƒ์ฒด ์ธ์ฆ, ์ธ์ฆ ํ† ํฐ ๋“ฑ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง๊ถŒํ•œ ๋ถ€์—ฌ (Authorization)์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ์—ญํ• (Role) ๊ธฐ๋ฐ˜, ์ •์ฑ…(Policy) ๊ธฐ๋ฐ˜, ์†์„ฑ(Attribute) ๊ธฐ๋ฐ˜์˜ ์ ‘๊ทผ ์ œ์–ด ๋ชจ๋ธ์„ ํ™œ์šฉ์„ธ์…˜ ๋ฐ ํ† ํฐ ๊ด€๋ฆฌ์„ธ์…˜ ๊ด€๋ฆฌ : ์‚ฌ์šฉ์ž ์ธ์ฆ ํ›„ ์„ธ์…˜์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ..

Security 2025.01.19

[๋„คํŠธ์›Œํฌ] ๊ณต์ธ(Public) IP vs ์‚ฌ์„ค(Private) IP

๊ณต์ธ IP (Public IP)์ •์˜์ „ ์„ธ๊ณ„์—์„œ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„๊ฐ€๋Šฅํ•œ IP ์ฃผ์†Œ, ์ธํ„ฐ๋„ท ์ƒ์—์„œ ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ์ „์„ธ๊ณ„์ ์œผ๋กœ ๊ณ ์œ ํ•˜๋ฉฐ, ISP(์ธํ„ฐ๋„ท ์„œ๋น„์Šค ์ œ๊ณต)์— ์˜ํ•ด ํ• ๋‹น๋จ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋œ ์žฅ์น˜๋‚˜ ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ์žฅ์น˜์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ฃผ์†ŒํŠน์ง•๊ณ ์œ ์„ฑ : ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์œ ์ผํ•œ ์ฃผ์†Œ์‚ฌ์šฉ ๋ฒ”์œ„ : ์ธํ„ฐ๋„ท ์ƒ์˜ ๋ชจ๋“  ๋„คํŠธ์›Œํฌ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ๊ด€๋ฆฌ ์ฃผ์ฒด : ISP ๋˜๋Š” ํŠน์ • ๊ธฐ๊ด€๋ณด์•ˆ : ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋จ, ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์–ด ๋ฐฉํ™”๋ฒฝ ๋“ฑ ๋ณด์•ˆ ์„ค์ •์ด ์ค‘์š”์‚ฌ์šฉ ์˜ˆ์‹œ์›น ์„œ๋ฒ„, ์ด๋ฉ”์ผ ์„œ๋ฒ„, ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๋“ฑ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ์žฅ์น˜์— ์‚ฌ์šฉ๊ฐ€์ •์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์šฐํ„ฐ๋กœ ISP๋กœ๋ถ€ํ„ฐ ๊ณต์ธ IP ํ• ๋‹น๋ฐ›์•„์„œ ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋จ  ์‚ฌ์„ค IP (Private IP) ์ •์˜์‚ฌ์„ค IP๋Š” ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” IP ์ฃผ์†Œ๋กœ ์ธํ„ฐ๋„ท..

[๋„คํŠธ์›Œํฌ] SSH, SFTP, FTP ํŠน์ง•๊ณผ ์ฐจ์ด์ 

SSH (Secure Shell)๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ „์†ก์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ์ธ์ฆ ๋ฐฉ์‹ -> ๋ณด์•ˆ์„ฑ ๋†’์Œ์ฃผ๋กœ ์›๊ฒฉ ๋กœ๊ทธ์ธ ๋ฐ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๊ธฐ๋ณธ ํฌํŠธ ๋ฒˆํ˜ธ : 22 SFTP (SSH File Transfer Protocol)SSH๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํŒŒ์ผ ์ „์†ก ํ”„๋กœํ† ์ฝœSSH ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์•”ํ˜ธํ™” ๋จ๋ฐ์ดํ„ฐ ์ „์†ก ์ค‘ ๋„์ฒญ์ด๋‚˜ ๋ณ€์กฐ ์œ„ํ—˜์ด ์—†์Œ๊ธฐ๋ณธ ํฌํŠธ ๋ฒˆํ˜ธ : 22 FTP (File Transfer Protocol)๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์ „์†กํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์ง€ ์•Š๊ณ  ํ…์ŠคํŠธ๋กœ ์ „์†ก๋ณ„๋„์˜ ๋ณด์•ˆ ๊ณ„์ธต์ด ์—†๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ์ „์†ก์— ์ ํ•ฉ๊ธฐ๋ณธ ํฌํŠธ ๋ฒˆํ˜ธ : 20 (๋ฐ์ดํ„ฐ ์ „์†ก), 21 (์ œ์–ด ๋ช…๋ น) ํŠน์ง•SSHSFTPFTP๋ณด์•ˆ๋งค์šฐ ๋†’์Œ๋งค์šฐ ๋†’์Œ๋‚ฎ์Œ์šฉ๋„์›๊ฒฉ ์„œ๋ฒ„ ์ œ์–ด๋ณด์•ˆ ํŒŒ์ผ ์ „์†ก์ผ๋ฐ˜ ํŒŒ..

[Silver III/JAVA] 16956 ๋Š‘๋Œ€์™€ ์–‘

https://www.acmicpc.net/problem/16956  ์กฐ๊ฑดํฌ๊ธฐ RxC์ธ ๋ชฉ์žฅ์–‘์€ ์ด๋™ํ•˜์ง€ ์•Š์Œ, ๋Š‘๋Œ€๋Š” ์ธ์ ‘ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅ์šธํƒ€๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์„œ ๋Š‘๋Œ€๊ฐ€ ์–‘์ด ์žˆ๋Š” ์นธ์œผ๋กœ ๋ชป๊ฐ€๋„๋ก ํ•ด์•ผ ํ•จ์šธํƒ€๋ฆฌ ๊ฐœ์ˆ˜ ์ œํ•œ ์—†์Œ ํ’€์ด ๊ณผ์ •์–‘ ์ฃผ๋ณ€์œผ๋กœ1. ๋Š‘๋Œ€-์–‘ ์ธ์ ‘ํ•œ๊ฐ€?2. ๋นˆ๊ณณ ์ฒดํฌํ•ด์„œ ์šธํƒ€๋ฆฌ ์„ค์น˜ ์—ฌ๋ถ€ ๊ฒฐ์ • ์ „์ฒด ์ฝ”๋“œimport java.io.*;import java.util.*;public class Main{ static int R, C; static char[][] map; static int[] dx = {-1,1,0,0}; static int[] dy = {0,0,-1,1}; public static void main(String[] args) throws ..

Algorithm/BOJ 2024.12.25

[Silver I/JAVA] 3187 ์–‘์น˜๊ธฐ ๊ฟ

https://www.acmicpc.net/problem/3187  ์กฐ๊ฑด์–‘ > ๋Š‘๋Œ€ -> ์–‘๋งŒ ๋‚จ์Œ , ๋Š‘๋Œ€ >= ์–‘ -> ๋Š‘๋Œ€๋งŒ ๋‚จ์Œ์šธํƒ€๋ฆฌ ๋ฐ”๊นฅ์—๋Š” ์–‘ ๋Š‘๋Œ€ ์—†์Œ๋นˆ๊ณต๊ฐ„ ์žˆ์Œ ํ•„์š”ํ•œ ๊ฒƒ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ฒดํฌ๋ฐฉํ–ฅ ์ด๋™ ๋ฐฐ์—ด dx, dy์šธํƒ€๋ฆฌ, ๋นˆ๊ณต๊ฐ„, ์–‘๋Š‘๋Œ€ ์ž…๋ ฅ ๋ฐ›์„ map ๋ฐฐ์—ด์ž…๋ ฅ์„ ๊ณต๋ฐฑ์—†์ด ๋ฐ›์Œ (charAt ์‚ฌ์šฉ) ํ’€์ด ๊ณผ์ •๋ฐฉ๋ฌธํ•œ ์  ์—†๊ณ , ์šธํƒ€๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ฉด BFS ํƒ์ƒ‰์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ ์ด๋™ํ•˜๋ฉด์„œ BFS ํƒ์ƒ‰์„ ํ•˜๊ณ  ๋Š‘๋Œ€์™€ ์–‘์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ๊ฐ ์นด์šดํŠธ๋งˆ์ง€๋ง‰์— ์ตœ์ข… ๋Š‘๋Œ€์™€ ์–‘์˜ ๊ฐœ์ˆ˜๋ฅผ ๋น„๊ต์ขŒํ‘œ ํ˜•ํƒœ๋กœ ํ์— ํ•œ๋ฒˆ์— ๋‹ด์„ ์ˆ˜ ์žˆ์Œ ์ „์ฒด ์ฝ”๋“œimport java.io.*;import java.util.*;public class Main{ static int R,C; //๊ฐ€๋กœC,์„ธ๋กœR static char[][]..

Algorithm/BOJ 2024.12.19