배운 것 1. Python 기초 2. Git & Github 사용법 3. 게이미피케이션을 통한 코딩의 즐거움 이번 주를 끝으로 SSAFY 에서 진행하는 스타트캠프가 끝났다. 이번 주의 시작은 로봇퀘스트와 크리에이터 챌린지를 통해 내가 코딩한 결과물을 육안으로 확인할 수 있는 시간들이었다. 특히나 로봇퀘스트 시간은 너무나 즐거운 시간이었다. 한 번의 실행으로 최대한 많은 미션을 수행하는 것이 우리팀의 목표였는데 수차례의 시행착오 끝에 반 내에서 가장 많은 미션을 연속으로 수행해내는 데에 성공했기 때문이다. 주차 후반부에는 앞으로 함께할 반 담당 강사님께서 Python 기초, API 에 대한 간단한 설명 및 실습, Git & Github 에 대한 설명을 해주셨다. Git & Github 는 과거에 사용한 적..
아이디어 먼저 BFS 를 통해 현재 상어의 위치에서 가까운 위치부터 탐색을 진행하며 먹을 수 있는 물고기가 있는지 확인한다. 이 때 자신보다 큰 물고기가 있는 칸은 상어가 통과할 수 없으므로 이 점에 주의해서 BFS 를 수행한다. 먹을 수 있는 물고기가 없으면 false 를 반환하고 먹을 수 있는 물고기가 있다면 1. 해당 물고기의 위치로 상어를 이동시키고, 2. 소요된 시간을 더해주고 3. 먹은 물고기 수를 늘려준 후 4. 먹은 물고기 수가 상어의 크기와 같다면 상어의 크기를 키워준다. 5. true 를 반환한다. 위 내용이 false 를 반환할 때까지 반복하면 문제에서 요구하는 답을 얻을 수 있다. 풀이코드 import java.io.BufferedReader; import java.io.IOExce..
https://www.acmicpc.net/problem/14938 14938번: 서강그라운드 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 www.acmicpc.net 아이디어 각 지역에 낙하했을 때 얻을 수 있는 아이템은 아이템이 있는 지역과 낙하한 지역 간 거리가 수색범위를 벗어나지 않는 경우이다. 따라서 1. 모든 지역 간의 최단 경로의 길이를 구하고 2. 임의의 낙하 지역에서 타 지역과의 거리가 수색 범위를 벗어나지 않는 경우에 한해 해당 낙하 지역에서 얻을 수 있는 아이템을 계산하고 3. 이 값들을 비교해 최대값을 얻어내면 된다. 입력의 크기가 작아 플로이드..
배운 것 오늘은 git 이 어떤 과정을 통해서 버전 관리를 하는지, 그리고 로컬에서 작업한 내용을 원격 저장소인 github 에 올리는 방법 등에 대해 배웠다. 나머지 시간은 자습을 했는데 다른 분께서 알고리즘 문제 하나를 물어보셨다. https://www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 단순히 합을 구해야 하는 매 횟수마다 2중 for문을 반복하게 되면 최악의 케이스는 연산을 거의 100억번 가까이 해야하..
아이디어 문제는 되게 길어보이지만 결국 정리하자면 정해진 시간 동안 1. 확산 2. 공기청정 과정을 수행하고 마지막에 남은 먼지 양을 체크하는 문제이다. 공기청정 과정은 배열에 담긴 값을 한 칸씩 밀면 되는 단순한 단계이고 약간 머리를 써야 하는 부분은 '확산' 이다. '확산'은 현 시점에서 먼지가 있는 모든 위치에서 동시에 일어나야 하므로 배열 하나만 사용할 경우 현 시점에 확산된 먼지가 동일한 시점에 재확산 되는 현상이 발생한다 따라서 '확산' 시에는 임시 배열을 만들어 임시 배열로 확산을 수행해야 한다. 풀이코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java...
배운 것 인터넷, 클라이언트/서버, API 에 대한 간략한 개념 Markdown Git 과 Github 오늘은 Markdown 을 배운 김에 TIL 도 Markdown 으로 작성해보고 있다. 사실 오늘 학습한 내용들은 다 과거에 학습했던 내용이지만 지속성 있게 학습을 하지 않아 새로운 것처럼 느껴졌다. 그리고 느낀 점은 CS 공부를 할 때 질문이 나오면 이런 식으로 대답해야지라는 암기식으로 학습을 하다보니 이해를 전혀 못하고 있다는 점이다. 예전에 면접스터디를 할 때 분명히 API 가 무엇인지 설명해보세요 라는 예상 질문을 만들고 거기에 대해 답변하는 훈련을 했었다. 근데 오늘 '소프트웨어 간 통신을 위한 인터페이스'를 뭐라고 하나요? 라고 물었을 때 뭐지...? 하면서 머리 속에 생각나는 건 '소프트웨..
배운 것 Python 기초 문법 및 자료형에 대해 학습하는 시간을 가졌다. 과거에 Python 을 했던 적이 있어 내용 자체는 크게 어렵지 않았다. 다만 5~6년 전을 마지막으로 Python 을 처음 써보는 거고 Java 에만 익숙해 있던 터라 조금씩 헷갈리는 부분들이 있었다. 특히 문자열과 숫자의 덧셈 부분이 그랬다. Java 에서는 다음과 같이 출력한다고 했을 때 자동 형변환이 일어나 에러가 발생하지 않았었다. System.out.println("나이 : " + 28); 하지만 Python 에서는 이렇게 문자열과 숫자를 더하려고 하면 type 문제로 인해 에러가 발생하게 된다. print('나이 : ' + 28) 추후엔 다시 Java 로 돌아갈지언정 SSAFY 1학기동안은 Python 을 사용해야 하..
아이디어 Sk 를 기준으로 양쪽을 잘라보면 S1 Sk+1 > ... > Sn 이므로 각각 증가하는 부분 수열, 감소하는 부분 수열임을 알 수 있다. 따라서 가장 긴 바이토닉 부분 수열은 배열의 각 원소를 Sk 로 놓고 가장 긴 증가하는 부분 수열, 가장 긴 감소하는 부분 수열을 구한 후 바이토닉 부분 수열을 계산하고, 각 바이토닉 부분 수열 중 가장 긴 놈의 길이를 출력하면 된다. 풀이코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { publi..