끄적끄적

코테준비/백준

[백준] 1759번: 암호 만들기 - Python

링크: https://www.acmicpc.net/problem/1759아이디어 비밀번호의 모든 가능한 조합을 탐색해야 하므로 백트래킹을 사용알파벳은 사전 순으로 정렬되어야 하므로 입력받은 알파벳 리스트를 정렬한 후 탐색을 시작백트래킹 함수는 매개변수로 현재 인덱스를 받아 해당 인덱스 이후의 문자들만 탐색패스워드의 길이가 L이면 해당 문자열이 유효한 비밀번호인지 check 함수를 통해 확인모음이 최소 1개자음이 최소 2개조건을 만족하면 해당 비밀번호를 출력하고 만족하지 않으면 그대로 return 구현import sysinput = sys.stdin.readlinedef check(password): mo = sum (1 for x in password if x in 'aeiou') ja = l..

코테준비/백준

[백준] 1182번: 부분수열의 합 - Python (Re)

링크: https://www.acmicpc.net/problem/1182 아이디어모든 경우의 수를 탐색하는 문제이므로 백트래킹을 활용한다.back 함수는 인자로 idx와 li_sum을 받는다.idx는 현재 탐색할 수열의 인덱스를 의미하며, 이를 통해 a + b 와 b + a 같이 중복되는 조합을 방지할 수 있다.li_sum은 지금까지 선택한 수들의 합이며, 이 값을 s와 비교해 조건을 만족하는지 판단한다.현재 합이 s와 같으면 cnt를 1 증가시킨다.하지만 여기서 탐색을 멈추는 것이 아니라 이후 값을 더한 경우도 여전히 조건을 만족할 수 있으므로 재귀를 이어간다.다만 s == 0인 경우 아무 값도 선택하지 않은상태에서 li_sum == s가 성립하므로 마지막에 cnt에서 1을 빼준다.구현import ..

코테준비/백준

[백준] 15651번: N과 M (3) - Python (Re)

링크: https://www.acmicpc.net/problem/15651 아이디어이전글 N과 M (1) 을 보고오면 더 쉽다.N과 M (1)과 유사하지만 조건 하나만 빼주면 위 문제가 풀린다.N과 M (1)에선 check 배열에 존재하면 추가하지 않았지만 이는 중복을 허용해야 하기 때문에 그 조건을 제거해준다.구현import sysinput = sys.stdin.readlinedef back(): if len(check) == m: print(*check) return for i in range(1, n+1): check.append(i) back() check.pop()n, m = list(map(int, input().spli..

코테준비/백준

[백준] 15649번: N과 M (1) - Python (Re)

링크: https://www.acmicpc.net/problem/15649 아이디어모든 가능한 경우의 수를 탐색해야 하므로 DFS를 활용한다.길이 제한 조건(M)이 있으므로 백트래킹이 적합하다.현재까지 선택한 숫자들을 check 리스트에 저장한다.리스트의 길이가 m이 되면 해당 수열을 출력한다.아직 길이가 m이 안 되었다면 1부터 n까지의 수 중 아직 선택되지 않은 수를 하나씩 추가하면서 재귀적으로 탐색을 이어간다.구현import sysinput = sys.stdin.readlinedef back(): if len(check) == m: print(*check) return for i in range(1, n+1): if i not in check: ..

웹 프로그래밍/Spring Boot

[Spring Boot] CRUD 간단 구현

Intro사정이 있어 며칠만에 돌아와 글을 작성합니다. 지금까지 Spring Boot 기반으로 프로젝트 환경과 폴더 구조를 정리해왔습니다.이제 본격적으로 간단한 CRUD 기능을 구현해보려 합니다.그 전에, 제가 진행 중인 NoteAnywhere 프로젝트의 전반적인 구조를 간략히 소개드리겠습니다.본격적인 코드 작성 전에 전체 흐름을 이해하는 데 도움이 될 것입니다. ERD사용자는 여러 개의 문서를 작성할 수 있고, 문서에는 여러 개의 댓글이 달릴 수 있는 구조입니다.아래는 이를 시각화한 ERD입니다.REST API 명세API 명세는 Notion을 통해 관리하고 있습니다. 아래 링크를 참고해주세요.https://imyeachan.notion.site/noteanywhere-api-docs API 명세서 | ..

웹 프로그래밍/Spring Boot

[Spring Boot] 기본적인 폴더 구조와 domain을 선택한 이유

Intro이전 글에서는 Spring Boot에서 사용되는 MVC 패턴의 구조와 요청 처리 흐름에 대해 살펴보았습니다.이번 글에서는 그 흐름을 실제로 구현하기 위해 Spring Boot 프로젝트 내에서 어떻게 폴더를 구성하고각 폴더가 어떤 역할을 가지는지 정리해 보려 합니다Spring Boot 프로젝트를 설계하는 데 있어 기본적인 폴더 구조와 책임 분리는 매우 중요한 부분입니다. 기본 폴더 구조우선 필자의 프로젝트에서 사용할 폴더 구조는 아래와 같습니다. 이 구조는 Spring Boot 기반의 대부분의 프로젝트에서도 자주 사용되는 형태이며,크게 다음과 같은 네 개의 계층으로 나눌 수 있습니다. 각 폴더의 역할controller/HTTP 요청을 받아 처리하는 클래스들이 위치합니다.사용자의 요청을 받아 어떤 ..

웹 프로그래밍/Spring Boot

[Spring Boot] MVC 패턴이란

IntroPython의 Django가 MTV(Model-Template-View) 패턴을 따르듯Java 기반의 Spring Boot는 MVC(Model-View-Controller) 패턴을 따릅니다. 이전 글에서는 프로젝트 초기 세팅과 서버 첫 실행까지 다뤘습니다.이번에는 본격적인 기능 구현에 앞서 Spring Boot의 핵심 구조인 MVC 패턴이 무엇인지, 어떤 원리로 동작하는지 가볍게 짚고 넘어가겠습니다. MVC 패턴이란?MVC는 Model–View–Controller의 약자로 애플리케이션을 세 가지 책임으로 분리해 구조화하는 디자인 패턴입니다.Model: 데이터와 비즈니스 로직을 담당합니다.예: DB 테이블과 매핑되는 @Entity, Repository, 서비스 로직 등View: 사용자에게 보여지는..

웹 프로그래밍/Spring Boot

[Spring Boot] 시작하기 - 환경 세팅

Intro지금까지는 막연히 "파이썬만 잘하면 취업할 수 있겠지" 라는 생각을 가지고 있었습니다.하지만 취업 시장을 마주하고 보니, 현실은 그리 녹록지 않더군요. 허허.그래도 Django, Express, FastAPI 등 다양한 웹 프레임워크를 다뤄본 경험이 있기에 Spring Boot도 금방 익숙해질 수 있으리라 생각합니다.이 글을 시작으로 Spring Boot의 기본적인 사용법을 익히고, 동시에 작은 프로젝트를 하나 만들어보려 합니다.저는 단순히 기능 구현에 그치지 않고 기술 하나하나를 선택할 때 왜 사용하는지 어떤 대안이 있는지를 항상 고민하며 학습하고자 합니다.단순한 기능 구현은 이제 중학생도 할 수 있습니다.기술자의 입장에서는 어떤 선택에도 책임과 확신이 필요하다고 생각합니다.그런 마음가짐으로 ..

코테준비/백준

[백준] 1743번: 음식물 피하기 - Python

링크: https://www.acmicpc.net/problem/1743 아이디어전염되어있는 크기를 구하는거니 bfs를 쓰자N, M 최대값이 각 100 밖에 안돼서 NxM 전체 탐색해도 시간복잡도 그리 안클거 같음NxM 크기의 배열을 각 요소를 0으로 선언해주고 r,c 위치를 다 1로 표시해준다. -> li방문 확인용 배열도 NxM 크기의 각 요소 0인 배열 선언li 리스트를 돌며 1인 (쓰레기위치)를 찾으면 방문했던 위치인지 판단.방문하지 않은 위치라면 bfs 함수 호출size를 1부터 시작해서(자기자신) 주변 탐색을 진행쓰래기 발견시 size+1하는 형식으로 진행bfs 함수는 size 값을 반환result는 초기값 0 을 가지고 bfs 함수 호출 시마다 큰 값을 result에 대입해줌li 탐색이 모두..

예찬예찬
'분류 전체보기' 카테고리의 글 목록