일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C/C++
- 스프링 프레임워크
- 시애틀
- 릿코드
- binary search
- STL
- 머신러닝
- 파이썬
- 프로그래밍언어론
- 라인
- 백트래킹
- 스타벅스
- 백준
- 벤쿠버
- Java
- leetcode
- 알고리즘
- Python
- 프로그래머스
- jvm
- spring
- 모두를 위한 딥러닝
- dfs
- C++
- 라인플러스
- BFS
- DP
- 딥러닝
- Spring Framework
- 다이나믹프로그래밍
- Today
- Total
케이스윔의 개발 블로그
문제2차원 배열로 빙산이 주어졌을 때, 1년이 지날 때마다 0인 바닷물과 인접한 만큼 빙산의 높이가 줄어든다. 한 덩어리의 빙산이 주어질 때, 이 빙산이 두 덩어리 이상으로 분리되는 최초의 시간(년)을 구하시오.문제 출처: 백준 온라인저지(https://www.acmicpc.net/problem/2573) 풀이정답율이 낮은 문제여서 어려울 줄 알았는데 빙산을 녹이는 부분, BFS(또는 DFS)를 통해서 빙산의 덩어리가 두덩어리로 나누어질 때를 확인해주면 되는 문제입니다. 처음엔 이중 for문을 통해서 각 칸에서 빙산이라면 얼마나 녹아야하는지를 탐색하려했는데 빙산이 아닌 부분(0인 곳)이 많을 경우에는 시간이 많이 걸릴 것 같아서 처음 입력을 받을 때 queue를 통해서 따로 빙산을 저장해줬습니다. 그 다..
문제레이저, 쇠막대기를 표시하는 string이 들어올 때 레이저에 의해 잘리는 쇠막대기의 개수를 구하시오.문제 출처: 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/42585) 풀이문제가 레벨2인데도 처음에 보고는 좀 어렵다고 생각했습니다. 근데 매우 간단한 문제였습니다! '('와 ')'가 연속으로 들어올 때에는 레이저를 쏜 것이고 아닐 때의 '('는 쇠막대기의 시작, ')'는 쇠막대기의 끝을 의미합니다. 쇠막대기가 들어오면, 즉 '('이면 스택에 쌓아줍니다. 쇠막대기가 끝나면=')'이면 스택에서 pop해줍니다. 이러한 과정에서 '('와 ')'이 연속으로 들어오면, 레이저를 쏘게되면 그 때 쌓여있는 스택의 사이즈만큼 쇠막대기가 생겨납니다. answ..
문제 파일명에 포함된 숫자를 반영하여 정렬하는 프로그램을 구현하시오.문제 출처: 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/17686) 풀이파일명이 주어지면 head, number, tail로 나눈 다음 정렬을 통해 쉽게 구할 수 있는 문제였습니다. head에는 숫자가 포함되지 않기 때문에 숫자가 나오는 순간부터는 number 영역이고, char로 입력된 number 영역은 int형으로 바꿔줘야합니다. head와 number를 구하고 input에서 해당 input의 인덱스와 함께 구조체로 vector에 넣어주었습니다. index를 구조체에 넣은 이유는 stable하게 정렬하기 위해서, 값을 편하게 고쳐서 구조체에 넣기 때문에(전부 소문자로 바꾸..
문제숫자를 0부터 시작해서 차례대로 주어진 진법으로 한개씩 말하는 게임에서 튜브가 말해야하는 숫자들을 구하시오.문제 출처: 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/17687) 풀이주어진 규칙에 따라 게임을 할 때 튜브가 말해야할 t번의 숫자를 알아내야합니다. m(인원)*t-1 + p번 반복문을 통해 해당하는 차례에 숫자를 구해봅니다. 우선 어떤 진수를 사용할 지 모르기 때문에 반복문 i가(i는 튜브가 말해야하는 가장 마지막 숫자까지 돕니다.) 돌고 있다면 j를(j는 10진법으로 표현된 돌아가고 있는 숫자) 0부터 시작해서 주어진 진법에 맞게 고쳐주고 고친 숫자를 한칸씩 잘라서 i++ 해줍니다. 풀다보니 반복문이 m(인원)*t-1 + p번 돌..
문제판이 주어지면 상하좌우 네 칸이 같으면 해당 칸은 사라지고 아래로 남은 블록들이 떨어진다. 지워지고 떨어지고를 반복할 때 지워지는 블록의 개수를 구하시오.문제 출처: 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/17679) 풀이이 문제는 처음에 풀다가 이렇게 풀면 안될 것 같은데?하는 생각에 잠시 접어뒀던 문제인데 생각나서 다시 풀어봤습니다. 4칸이 같으면 해당 칸이 지워지고 남은 블록들을 아래로 떨어지게 해야합니다. BFS를 통해서 블록이 존재하는 판을 탐색하다가 상하좌우가 같으면 지우기 위한 리스트에 추가해줍니다. BFS 탐색이 끝나면 지워야하는 리스트를 지우며 지워지는 블록의 카운트를 세줍니다. 4칸 2개가 6개처럼 중첩되어 있을 경우가..
문제주어진 string을 LZW 압축한 후 색인 번호를 출력하시오.문제 출처: 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/17684) 풀이어렵게 보였지만 꽤 간단하게 풀린 문제였습니다.(근데 이 문제의 정답률이 무려 95.80%.. 3차까지 가신 분들은 대단해..) LZW 압축 알고리즘을 구현하는 문제인데 저는 처음 들어보는 알고리즘이었지만 설명이 친절하게 적혀있어서 하나씩 따라서 풀어가면 됩니다. 사전을 이용하라는 말에 바로 map을 이용해야겠다고 생각했습니다. 주어진 문자열 msg의 에서 제일 첫 문자에서 시작합니다. 첫 문자는 한글자이기 때문에 당연히 색인에 존재할 것입니다. 이후부터는 색인에 속하는 가장 긴 문자열 w를 찾는 부분과 w를..
문제셔틀버스의 횟수, 간격, 줄을 기다리는 대기열의 배열이 주어졌을 때 셔틀버스를 탈 수 있는 도착 시각 중 가장 늦은 시각을 구하시오.문제 출처: 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/17678) 풀이처음에 문제를 보고 쉽다고 생각이 들었지만 예제를 보니 꽤 어렵게 느껴졌습니다. 풀고나니 쉬운 문제였고 방금 풀었던 기억을 정리해보니 처음에 더 정리해서 풀었다면 빨리 풀었을 거라는 생각이 들었습니다. 우선 처음엔 어떻게 마지막 셔틀을 탈 수 있는 시간을 구할지 생각해보며 string으로 들어오는 timetable을 숫자로 바꾸는 작업을 했습니다. 09:00 와 같이 들어오기 때문에 hour = (timetable[i][0]-'0')*10 ..
문제캐시 크기와 도시이름 배열이 주어질 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오.문제 출처: 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/17680) 풀이캐시 교체 알고리즘인 LRU를 적용시키는 문제였습니다. 처음에 든 고민은 어느 자료구조를 통해서 캐시를 구현해야하나였는데 랜덤 액세스가 가능해야하고(가장 마지막 사용된 부분이 어디인지 모르기 때문에) 삽입, 삭제가 빈번하지 않고 캐시의 값만 바꿔주면 되므로 vector를 사용했습니다.(가장 오래 사용한 것을 빼야하니까 우선순위큐가 생각이 났었지만 랜덤액세스가 불가능하기때문에 안됩니다.) 처음에는 살짝 막막했었는데 우선 캐시사이즈가 가득 차기 전까지는 해당 값이 벡터에 없을 경우엔..