분류 전체보기
-
백준_18114_블랙 프라이데이 (python)Algorithm/백준_생각정리 2023. 5. 8. 18:39
★ 접근 처음에는 C가 최대 1억까지라서 1억 길이의 배열을 만들고 5000c2 조합을 통해 C와 무게가 같아질 수 있는지를 맞추려고 했다. 시간초과가 났다. 그 다음에 생각한 방법이 무게 w가 일렬로 주어지고 C라는 무게에 합을 맞추면서 최대 3개까지 조합해야 되기 때문에 투 포인터를 생각했다. ★ 풀이 1. 입력받은 데이터를 오름차순으로 정렬한다. 2. 처음에 c가 data(입력받은 리스트)에 있는지 체크한다. 3. 없다면 left, right = 0, n-1로 초기화 하고 두개의 합을 구해 total에 저장한 후에 c보다 크다면 j를 줄이고 4. 같다면 두 개의 조합만으로도 바로 만들 수 있다는 거니 return해서 끝낸다. 5. total이 c보다 작다면 diff = c - total을 통해서 d..
-
백준_22352_항체 인식(python)Algorithm/백준_생각정리 2023. 5. 4. 13:38
● 접근법 - 처음에 격자 그림이 주어지고 항체가 상하좌우로 퍼진다는 조건을 보고 bfs를 떠올렸다. N,M의 크기가 크지 않은 것을 보고 bfs 확신이 생겼다. ● 풀이법 ★ 두개 before에서 상하좌우로 마주친 칸이 같은 크기였다면 항체는 무조건 퍼져야 한다. ★ 1. 그래프를 순차적으로 하나하나 탐색하면서 방문하지 않은 좌표를 check()함수를 이용해 확인한다. 2. beforeNumber와 afterNumber의 값이 다르다면 answer + 1해준다. (answer의 크기가 1 보다 커진다면 만들어질 수 없는 그래프이다. 왜냐하면 항체는 한 번만 뿌리기 때문이다.) 3. 상하좌우를 탐색하면서 그래프 안에 있으면서 before 그래프에서 서로 크기가 같은 것만 확인한다. (이 문제의 key는 ..
-
백준_14499_주사위 굴리기(python)Algorithm/백준_생각정리 2023. 5. 2. 13:24
★ 접근법 그래프의 크기, 명령의 개수 입력들의 최대 사이즈가 크지 않았기 때문에 단순 구현으로 접근했다. ★ 풀이법 (좌표의 이동과 그래프의 범위를 벗어나는 것을 계산하는 것은 단순했기 때문에 메인인 주사위 굴리는 것에 초점을 뒀다) 1. 주사위 리스트를 만들어놓고 주사위 인덱스에 자신이 생각하는 인덱스별 주사위 면의 위치를 정한다. (필자는 밑면, 뒷면, 윗면, 앞면, 왼쪽면, 오른쪽면을 기준으로 했다.) 2. 주사위를 굴리는 방향 별로 주사위 면의 위치가 바뀌는 것을 구현해준다. - 코드 n,m,r,c,k = map(int,input().split()) data = [] for i in range(n): data.append(list(map(int,input().split()))) command =..
-
spring과 spring boot의 다른 점Spring/spring 2023. 5. 2. 00:52
1. 이 글을 쓰게 된 이유 ~ ~ ● 평소에 스프링 부트를 사용해 편하게 스프링을 사용하면서 spring 프레임 워크에대해 학습했다. 이번에는 스프링 시큐리티를 공부하기 위해서 스프링 시큐리티에 대해서 알아보던 중 어느 한 글을 봤다. 회사에서 스프링 부트를 사용하지 않고 스프링 시큐리티를 사용해보라는 글이었다. 처음에는 이게 무슨 말인가 싶었다. 결국 둘다 스프링 프레임워크이고 스프링 부트는 스프링을 보다 편리하게 이용해주는 도구인데 굳이??? 스프링 부트를 사용하지 않고 스프링 시큐리티를 사용한다?? 이해가 되지 않았다. 그래서 알아보기로 했다. 2. spring이란 - 스프링(spring)은 자바 기반의 오픈소스 프레임워크로, 다양한 모듈을 제공하여 웹 어플리에키션 개발을 지원합니다. ● 스프링 ..
-
백준_20056_마법사 상어와 파이어볼(python)Algorithm/백준_생각정리 2023. 4. 30. 21:38
※ 접근법 입력제한에서 N의 최대 크기는 50이었고 k의 최대 크기는 1000이었기 때문에 문제에서 시키는대로만 구현하면 된다. ※ 풀이 1. defaultdict(list)인 사전형을 두개 만들었다. 2. 사전형의 키는 좌표 값이었고 좌표 값은 변하지 않을 것이기에 튜플 형태로 지정했다. value값은 질량,속도,방향순서대로 리스트 형태로 삽입했다. 3. k의 크기만큼 start(파이어볼 움직임), check(파이어볼이 두개 이상 뭉쳐있는지)를 실행해줬다. 4. start()함수는 매우 간단한데 dic에서 key를 하나씩 꺼내서 파이어볼을 이동시켜준다. 5. check() 함수도 문제에서 시키는 대로만 하면 되는 간단한 함수이다. 6. 문제 알고리즘 유형 자체가 구현, 시뮬레이션으로 구분 되기 때문에 ..
-
백준_5545_최고의 피자(python)Algorithm/백준_생각정리 2023. 4. 19. 14:08
※ 접근법 n의 숫자가 크지 않았기 때문에 구현으로 풀어야겠다고 생각했다. ※ 풀이 1. 처음 도우만 선택했을 때 1원당 칼로리를 계산해놓는다. 2. 입력받은 칼로리를 리스트에 저장해놓고 내림차순으로 정렬한다. 3. 리스트에서 칼로리를 하나씩 보면서 1원당 칼로리를 계산하고 이전에 구했던 것보다 작아진다면 반복문을 탈출한다. ( 토핑의 가격은 하나로 고정돼있기 때문에 칼로리를 내림차순으로 정렬해놓으면 뒤로 갈수록 1원당 가격이 내려갈 수 밖에 없다.) n = int(input()) a,b = map(int,input().split()) dow = int(input()) data = [] for i in range(n): data.append(int(input())) data.sort(reverse=Tru..
-
백준_15961_회전 초밥(python)Algorithm/백준_생각정리 2023. 4. 14. 15:51
※ 접근 입력 개수가 최대 3,000,000만이었기 때문에 반복을 한 번 돌아야겠다고 생각을 했고 이벤트에 무조건 참여해야했기에 k개의 초밥을 무조건 먹었어야했다. 그래서 k개씩 짤라서 이동해야했기에 슬라이딩 윈도우를 사용했다. (문제에서 주어진 조건대로 구현했지만 이런 방식의 알고리즘을 슬라이딩 윈도우라고 부른다.) ※ 풀이 1. 이벤트에 무조건 참여해야했기에 c 쿠폰번호의 초밥은 무조건 먹었다고 가정했다. 2. 처음에는 left, right(코드에서는 left, right가 없지만)가 움직일 필요가 없기에 k개까지 초밥을 먹는다. 3. 그 다음부터는 가장 맨 처음 먹었던 초밥은 뱉고 마지막에 먹었던 초밥 바로 오른쪽 것을 먹어주는 동작을 반복한다. -- 정답 코드 -- import sys input ..
-
프로그래머스_연속된 부분 수열의 합(python)Algorithm/프로그래머스_생각정리 2023. 4. 10. 15:00
※ 접근 sequence의 길이가 최대 백만이었기에 중첩 포문을 돌면 안되겠다는 생각이 제일 먼저 떠올랐다. 구간 합을 구하고 그 구간이 계속 변해가야하기에 left,right 투 포인터를 사용하기로 했다. ※ 풀이 1. 첫 시작과 나중을 구분했다. 그 이유는 처음에는 k를 같든 작든 크든 right가 오른쪽으로 이동해줘야 하기 때문이다. (right는 left보다 같거나 큰 idx에 위치해야 하기 때문이다. ) 2. temp == k라면 구간의 길이를 key로 하고 left, right를 사전형에 추가시켜준다. left와 right를 오른쪽으로 한 칸씩 이동시켜준다. 3. temp > k라면 left를 줄여준다. 4. temp < k라면 right를 한 칸 오른쪽으로 이동시켜준다. 5. 마지막에 가장 ..