일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Python
- 다이나믹프로그래밍
- 스타벅스
- 스프링 프레임워크
- 알고리즘
- 벤쿠버
- 백준
- C++
- C/C++
- leetcode
- 모두를 위한 딥러닝
- DP
- 딥러닝
- 파이썬
- dfs
- Spring Framework
- 릿코드
- 라인
- BFS
- 시애틀
- jvm
- Java
- 머신러닝
- 백트래킹
- 프로그래밍언어론
- 라인플러스
- spring
- binary search
- STL
- 프로그래머스
- Today
- Total
목록알고리즘 (59)
케이스윔의 개발 블로그
문제숫자를 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를 사용했습니다.(가장 오래 사용한 것을 빼야하니까 우선순위큐가 생각이 났었지만 랜덤액세스가 불가능하기때문에 안됩니다.) 처음에는 살짝 막막했었는데 우선 캐시사이즈가 가득 차기 전까지는 해당 값이 벡터에 없을 경우엔..
문제세번의 다트 게임을 통해 얻을 수 있는 점수를 계산 하시오. 총 3번의 기회가 있고 점수와 함께 제공되는 보너스와 옵션을 고려해야합니다.문제 출처: 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/17682) 풀이상당히 문제가 길지만 그 만큼 조건이 많아서 각 조건들을 놓치지 않으면 해결할 수 있는 문제입니다. 처음에 입력이 string으로 들어오는데 3번의 점수로 나누어서 입력을 받을 수 있어야 하고, 보너스 계산은 쉽지만 옵션은 앞 점수까지도 고려해야합니다. 각 단계의 점수를 저장할 배열 num[3]과 스타상과 아차상을 저장할 bonus[3] 배열을 만들었습니다. S, D, T가 들어왔을 때는 각 점수에 바로 계산을 해서 num에 저장하면 되..
문제n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.문제 출처: 백준 온라인 저지(https://www.acmicpc.net/problem/1912) 풀이처음에는 문제를 보고 난해하다 생각했습니다.(*^^*) 일부 연속된 수를 합해서 최대의 수를 만들어야했는데 음수가 과연 포함될 수 있을지에 대한 고민이 들었습니다. 그냥 생각해보면 음수가 더해지면 작아지니까 아닐 것 같았는데 생각해보니 100 -1 100 이라는 경우..
문제0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다.문제 출처: 백준 온라인 저지(https://www.acmicpc.net/problem/2225) 풀이문제를 읽어보았을 때 꽤 간단한 문제라고 느껴서 바로 점화식을 세웠지만 조건을 하나 놓쳐서 다시 읽어본 문제입니다. 식은 간단히 세울 수 있었습니다 dp[N][K]를 K개의 정수를 더해서 N을 만드는 것이라고 정의를 합니다. 그렇게 되면 dp[N][K] = dp[N-(N또는 보다 작은 정수)][K-1]의 합이 됩니다. 즉 N또는 N보다 작은 숫자를 K-1개로 만들었다면 거기에다가 ..