일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- codility
- 소수
- 최단경로
- beandefinitionstoreexception
- spring security
- Spring
- 알고리즘
- java
- Greedy
- 문자열
- Python
- 코딩테스트
- Dijkstra
- error
- API
- BFS
- 탐욕법
- 백준
- counting elements
- brute force
- 2981
- springboot
- 파이썬
- applicationeventpublisher
- 2018 KAKAO BLIND RECRUITMENT
- 프로그래머스
- HTTP
- algorithm
- javascript
- 라이브템플릿
- Today
- Total
목록분류 전체보기 (78)
Altiora Petamus
시큐리티를 사용하기 위해서는 의존성을 추가해야 합니다. springboot-starter 에 포함되어 있으므로 프로젝트 생성 과정에서 Spring security 를 선택해주면 build.gradle 에 작성되고 사용할 수 있게 됩니다. 사용법에 집중하기 위해서 패키지 생성 및 의존성을 추가하는 과정은 과감히 생략합니다. Default 화면 확인해보기 시큐리티는 기본적으로 로그인 화면을 제공합니다. 다음과 같은 클래스들을 작성해주고 main 을 실행켜보겠습니다. @SpringBootApplication public class BasicTestApplication { public static void main(String[] args) { SpringApplication.run(BasicTestApplic..
코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 🤔생각해보기 먼저 문제의 조건을 살펴보자면, 속한 노래가 많이 재생된 장르를 먼저 수록 → 각각 장르의 재생 횟수를 정렬된 상태로 봐야 한다. 장르 내에서 많이 재생된 노래를 먼저 수록 → 특정 장르에서 어떤 노래가 많이 재생되었는지 알아야 한다. 고유번호가 낮은 노래를 먼저 수록 → 최초 정렬시 고유번호로 정렬하여 Stable sort 가 유지되도록 유도하기 어느 정도 방향성을 잡은 후엔, 사고를 단순하게 하기 위해 dictionary 를 두 개 선언해서 풀..
코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 🤔생각해보기 처음엔 문제를 보고 살짝 당황했다. 문자를 하나하나 모두 체크하라는건지 도대체 이걸 어떻게 풀어야하나... 그래서 그림으로 그려봤다. 이런 모양의 그래프가 그려지며, 그림을 보면 반대편 끝에 있는 "cog" 가지 도달하기 위한 깊이를 세어주면 되겠다는 느낌이 든다. 그래프를 그려보면 알게되지만, 결국 모든 스펠링의 검사가 필요하다. 알고리즘을 순서대로 적어보자면, 거리를 알기 위해 BFS 를 이용하여 각 노..
2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 🤔생각해보기 모든 경우의 수를 구한 후, 조건을 초과하지 않는 가장 큰 합을 출력하면 되는 간단한 문제이다. for 문을 돌면서 3가지 카드 '조합'을 구해도 되겠지만, 파이썬 모듈 itertools 를 활용하면 복잡한 과정을 생략할 수 있다. 코드 from itertools import combinations n, m = map(int, input().split()) cards = list(map(int, input().spli..
2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 🤔생각해보기 이 문제는 사실상 최빈값을 구하라는 문제. 나머지는 단순한 연산으로도 구할 수 있다. 최빈값을 구하기 위해 여러가지 방법을 썼지만, 시간초과로 해결하지 못했었는데 Counter를 쓰면 갯수를 세야할 때 아주 편리하다는 것을 알게 되었다. 시간초과 # 최빈값(mode) ; N개의 수들 중 가장 많이 나타나는 값 modes = sorted(numbers, key=lambda x: numbers.count(x), reverse=True) if len(modes) == ..
7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 🤔생각해보기 지금까지 시작 지점이 하나인 그래프 탐색은 비교적 간단하게 해결할 수 있었다. 하지만 이 문제는 동시에 여러 지점에서 탐색을 진행해야해서 어떻게 해야할까 고민이였는데, 잘 생각해보니 그냥 BFS 알고리즘에다가 시작지점만 여러개를 넣어주면 되는 것이였다. 익은 토마토의 좌표를 찾아서 root 배열에 담아놓는다. BFS 탐색을 위해 queue 에 root 들을 담은 상태로 초기화한다. 미로 탐색 과정을 응용해서 전 칸의 값에 1을 증가시..
스프링 시큐리티란? 시큐리티가 필요한 이유 웹사이트는 각종 서비스를 하기 위한 리소스와 서비스를 사용하는 유저들의 개인정보를 가지고 있습니다. 이들 리소스를 보호하기 위해서 일반적으로 웹사이트는 두가지 보안 정책을 설정해야 합니다. 1. 인증 (Authentication) 사이트에 접근하는 사람이 누구인지 시스템이 알아야 합니다. 익명사용자(anonymous user)를 허용하는 경우도 있지만, 특정 리소스에 접근하거나 개인화된 사용성을 보장 받기 위해서는 반드시 로그인하는 과정이 필요하겠죠. 로그인은 보통 username / password 를 입력하고 로그인하는 경우와 sns 사이트를 통해 인증을 대리하는 경우가 있습니다. UsernamePassword 인증 Session 관리 토큰 관리 (sessi..
1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 🤔생각해보기 문제는 간단하다. 에라토스테네스의 체를 사용해서 풀면 된다. 개인적으로 소수 구하는 문제에서 자주 쓰는 방법은 제곱근까지만 약수의 여부를 검증해서 O(logN)의 시간 복잡도로 구하는 것이다. 에라토스테네스의 체는 다량의 소수를 한 번에 판별할 때 쓰면 좋은 방식으로 자세한 내용은 다음을 참고하자. 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net m, n = map(int, input().split()) a = [False, False] + [True] *..