Stay Hungry Stay Foolish

전체 글 423

프로젝트 환경설정

1. Spring Initializr 를 통해 프로젝트 설정아래와 같이 프로젝트를 미리 설정하고 Generate를 클릭해 파일을 다운받아 인텔리제이에서 불러온다.  2. 파일 열기 맨 처음 파일을 불러올 때 build.gradle을 클릭해서 불러온다. 파일을 처음 열면 로딩이 길다. 라이브러리를 모두 다운받아야 하기 때문에 시간이 오래 걸린다.  3. build.gradle build.gradle 파일에서 내가 원하는 대로 파일이 설정돼 있는지 확인한다. plugins { id 'java' id 'org.springframework.boot' version '3.4.0' id 'io.spring.dependency-management' version '1.1.6'}group = 'jpabook'versi..

웹 애플리케이션 개발 시작

start : 2024-12-02 진행 순서1. 프로젝트 환경설정2. 도메인 모델과 테이블 설계3. 애플리케이션 기능 구현 목차1. 프로젝트 환경설정Spring BootJPAGradleThymeleaftHIBERNATETomcat2. 요구사항 분석회원 기능, 상품 기능, 주문 기능의 요구사항을 분석3. 도메인과 테이블 설계분석한 요구사항을 토대로 도메인 모델을 설계 엔티티 설계테이블 설계엔티티와 테이블을 ORM으로 매핑4. 아키텍처 구성애플리케이션 아키텍처를 간단하게 구성 5. 핵심 비즈니스 로직 개발(회원, 상품, 주문)회원, 상품, 주문 도메인 개발핵심 비즈니스 로직 개발6. 테스트테스트 케이스 검증도메인 주도 설계 이해7. 웹 계층 개발앱 기반 위에 웹 계층을 올림 뷰 컨트롤러와 뷰 템플릿을 올려서..

[BOJ] 1303. 전쟁 - 전투 (Python/그래프탐색/Silver 1)

[문제 링크] 👉 https://www.acmicpc.net/problem/1303풀이 방법💡 DFS, BFS 이용 📌 주의할 점가로, 세로 확인하가Solutionfrom collections import dequedx = [1, 0, -1, 0]dy = [0, -1, 0, 1]N, M = map(int, input().split())war = [input().strip() for _ in range(M)]visited = [[0] * N for _ in range(M)]W, B = 0, 0def dfs(i, j, color): cnt = 1 visited[i][j] = 1 queue = deque() queue.append((i, j)) while queue: ..

[Programmers] L1. 카드 뭉치 (Python)

[문제 링크] 👇  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡Queue 이용cards1와 cards2를 각각 큐처럼 사용하여, 앞에서부터 단어를 꺼냄goal 배열의 각 단어에 대해해당 단어가 cards1의 맨 앞에 있다면 cards1에서 제거그렇지 않고 cards2의 맨 앞에 있다면 cards2에서 제거두 곳 모두에 없다면 "No"를 반환모든 단어를 성공적으로 처리했다면 "Yes"를 반환Solutionfrom collections import dequedef solution(cards1, cards2, goal): answer = "Yes" cards1 = deque(car..

[Programmers] L1. 추억 점수 (Python)

[문제 링크] 👇  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법photo 에서 한 행씩 꺼내고, 해당 행의 열을 하나씩 꺼내서 이름 리스트에 이름이 있는 경우 점수에 누적시킨다.한 행을 다 돌았으면 점수를 결과 리스트에 추가한다. Solutiondef solution(name, yearning, photo): answer = [] for i in photo: score = 0 for j in i: if j in name: # 해당 이름이 있는 경우 score += yearning[name.index(j)] ..

[Algorithm] 최소 힙(Min Heap)

최소 힙 최소 힙(Min Heap)은 이진 트리 형태의 자료구조로, 부모 노드의 값이 항상 자식 노드의 값보다 작거나 같은 특성을 갖는 구조이다. O(logn)의 시간 복잡도로 삽입/삭제 가능작은 값을 효율적으로 관리 가능특정 값 삭제, 임의 인덱스 접근이 비효율적. O(n)이 소요됨특징부모 ≤ 자식모든 부모 노드의 값은 자식 노드의 값보다 작거나 같다.가장 작은 값이 루트 노드에 위치.완전 이진 트리트리의 모든 레벨이 꽉 차 있으며, 마지막 레벨은 왼쪽부터 채워져야 함.활용최소 힙은 최솟값을 효율적으로 찾거나 관리해야 하는 상황에서 유용하다.우선순위 큐 구현정렬되지 않은 데이터에서 최솟값 추출데이터 스트림에서 k번째 작은 값 유지 연산삽입 O(log⁡n) 새 데이터를 트리의 가장 아래(왼쪽부터 채움)에..

알고리즘 2024.11.16

[Programmers] L1. 명예의 전당 (최소 힙/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ 명예의 전당 유지명예의 전당은 k 개의 점수를 유지하며, kkk개를 초과하면 가장 낮은 점수를 제거우선순위 큐(최소 힙)를 활용하면 효율적으로 관리 가능2️⃣ 최하위 점수 추출매번 명예의 전당에서 최하위 점수를 확인하여 기록3️⃣ 점수 처리점수를 하나씩 추가하며 명예의 전당을 업데이트명예의 전당이 가득 차면 최저 점수와 비교 후 대체Solution최소 힙 구현import heapqdef solution(k, score): hall_of_fame = [] # 명예의 전당 (최소 힙) result = [] f..

[Programmers] L2. 귤 고르기 (Greedy/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ 귤의 종류별 개수 파악귤의 크기별로 몇 개씩 있는 개수를 센다. (Counter() 함수 이용)from collections import Countertangerine = [1, 3, 2, 3, 2, 4, 4, 4, 4]print(Counter(tangerine))출력 결과 : Counter({4: 4, 3: 2, 2: 2, 1: 1})2️⃣ 개수를 기준으로 정렬귤의 개수를 내림차순으로 정렬한다. 이는 개수가 많은 종류부터 선택하도록 하기 위함이다.위 예시에서 내림차순으로 정렬하면 [(4, 4), (3, 2), (2, 2)..

[Algorithm] Two-Pointers(투 포인터)

투 포인터배열이나 리스트를 탐색할 때, 두 개의 포인터를 사용하여 효율적으로 문제를 해결하는 알고리즘 기법이다. 주로 정렬된 배열에서 특정 조건을 만족하는 값을 찾거나, 구간 합을 계산하는 문제 등에 사용된다.효율적 : 정렬된 배열에서 탐색 시 O(n) 으로 해결 가능간단한 구현 : 포인터 이동만으로 문제 해결 투 포인터 개념포인터(Pointer) : 배열의 특정 인덱스를 가리키는 변수두 개의 포인터를 배열의 양 끝 또는 특정 시작점과 끝점에 두고, 포인터를 이동시키며 문제를 해결 사용 조건배열이 정렬된 경우가 많을 때특정 구간이나 두 값의 합을 계산할 때 효율적으로 탐색할 필요가 있을 때 대표적인 동작 방식시작과 끝 포인터 사용 (양 끝에서 이동)배열의 가장 왼쪽과 오른쪽 끝에 포인터를 둔 뒤, 조건에..

알고리즘 2024.11.15

[Programmers] L2. 구명보트 (Python/투 포인터)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ 정렬  (O(nlog⁡n)시간) 사람들의 몸무게 리스트를 오름차순으로 정렬한다.이렇게 하면 가장 가벼운 사람과 가장 무거운 사람을 효율적으로 짝지을 수 있다.2️⃣ 투 포인터 사용 (O(n) 시간) 리스트의 가장 가벼운 사람(왼쪽 포인터)과 가장 무거운 사람(오른쪽 포인터)을 확인한다.두 사람의 몸무게 합이 보트의 무게 제한을 초과하지 않으면, 두 사람을 한 보트에 태운다(양쪽 포인터를 이동).3️⃣ 혼자 태우기두 사람의 몸무게 합이 무게 제한을 초과하면, 가장 무거운 사람만 보트에 태우고 오른쪽 포인터를 이동한다.4️⃣ ..

[BOJ] 2460. 지능형 기차 2 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/2460풀이 방법내릴 때는 빼고, 탈 때는 더한다.그리고 연산 결과를 max() 함수를 통해 최댓값을 갱신한다. 최댓값 갱신result = max(result, max_on) Solutionget_off, get_on = [], []for _ in range(10): off, on = map(int, input().split()) get_off.append(off) get_on.append(on)result, max_on = 0, 0for off, on in zip(get_off, get_on): max_on -= off max_on += on result = max(result, max_on)p..

[BOJ] 3460. 이진수 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/3460풀이 방법1️⃣ 이진수 변환format(int(input()), 'b')변환 결과 타입은 정수형이 아닌 str 이다.2️⃣ 뒤집기문자열[::-1]슬라이싱을 이용해 전체를 한번에 뒤집는다. [[파이썬] 이진법, 이진수, 2진수 변환 방법] 🔗 https://dev-cloud.tistory.com/416SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): n = format(int(input()), 'b')[::-1] # 양의 정수 n -> 이진수 변환 -> 뒤집기 result = [] # 결과를 담을 리스트 for i in ..

[파이썬] 이진법, 이진수, 2진수 변환 방법

이진법 변환 방법 1️⃣ bin() 함수 사용bin() 함수는 숫자를 2진법 문자열로 변환하여 반환n = 5binary_str = bin(n) # 결과: '0b101' 2️⃣ format() 함수 사용format() 함수의 'b' 포맷 코드를 사용하여 2진법 문자열을 얻을 수 있다.n = 5binary_str = format(n, 'b') # 결과: '101' 3️⃣ f-string을 사용한 포맷팅f-string 안에서도 :b를 붙여서 2진법으로 출력할 수 있다.n = 5binary_str = f"{n:b}" # 결과: '101' 4️⃣ bin() 함수 + 슬라이싱bin() 함수의 결과에서 접두사 '0b'를 제거하기 위해 슬라이싱을 사용할 수 있다.n = 5binary_str = bin(n)[2:]..

알고리즘 2024.11.15

[BOJ] 2501. 약수 구하기 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/2501풀이 방법약수 구하기N의 약수를 모두 찾기 위해 1부터 N의 제곱근 까지의 수 i를 확인한다.만약 i가 N의 약수라면 i 와 N / i 를 약수 리스트에 추가한다. 이때, i와 N / i 가 같지 않으면 중복을 피하기 위해 둘 다 추가한다.예를 들어 N이 36일 때, 약수로 6이 두 번 나올 수 있기 때문이다.정렬약수를 모두 찾은 후, 작은 순서로 정렬하여 K번째 작은 약수를 찾는다.출력약수의 개수가 K 보다 크거나 같다면, 정렬된 리스트에서 K 번째 약수를 출력한다.약수의 개수가 K 보다 적다면 0을 출력한다.✔️ 정렬 방법sorted(divisor)리스트 혹은 문자열 등을 내장함수로 이용해 정렬할 수 있다.sort()..