개발 블로그
[TIL] 스타트캠프 6일차
SSAFY/TIL 2024. 1. 9. 17:17

배운 것 오늘은 프로그래밍으로 로봇을 조작하고 퀘스트를 클리어하는 수업이 진행되었다. 한 번 프로그램을 실행시켰을 때 수행해낸 미션 수에 따라 보너스 점수가 지급되는 구조였기에 5개의 미션을 한 번에 클리어하는 것을 목표로 진행하였다. 이 중 물품을 옮기는 작업에서 초기에는 이 물품을 잡고 움직이는 방식을 구상했으나 쉽지 않았고 생각의 전환을 통해 차체로 밀고 가는 방식을 선택해서 해결했다. 그 외에도 여러 번의 시행착오를 겪었고 결국 5개의 미션을 해내는 데에 성공했다. 중간중간에 포기하고 한 번에 2~3개의 미션만 수행하도록 코드를 변경할까도 했지만 결국 해냈고 이 과정을 통해 앞으로의 SSAFY 생활에서도 어려움이 닥쳤을 때 포기하지 않아야 함을 배웠다.

article thumbnail
10830번. 행렬 제곱

아이디어 A ^ N = (A ^ N/2) * (A ^ N/2) 이므로 재귀함수를 활용하되 시간복잡도가 커지지 않도록 N/2 크기씩 줄여가며 재귀함수를 호출하면 충분히 통과가 가능하다. 지수 연산을 하는 exp() 메서드와 행렬 곱셈 연산을 수행하는 multiply() 메서드를 만들어 문제를 해결하면 된다. 풀이코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int N; static int[][] I; public static void main(String[] args) thr..

[TIL] 스타트캠프 5일차
SSAFY/TIL 2024. 1. 8. 21:16

배운 것 오늘은 RedBrick 이라는 사이트를 이용해서 간단한 게임을 만드는 시간을 가졌다. javascript 기반으로 코딩해서 게임을 구현할 수 있었다. 우리 팀은 '무단횡단'을 주제로 게임을 만들었고 나는 거기서 로직을 구성하는 코드를 짜는 일을 담당했다. 이 과정에서 내가 생각한 대로 구현하는 게 참 어렵구나... 라는 점을 느꼈다. 보통 구현은 이미 만들어진 메서드를 활용하는 방식이었는데 메서드의 내부 동작 원리를 모르다보니 이와 연계해서 우리 팀이 생각한 기능을 구현하는 데에 어려움이 있었다. 예전에 Spring 에 대해 공부할 때도 Spring 이 자동으로 해주는 영역에 대한 이해도가 없어 애를 먹은 적이 있는데 그게 이번 시간에도 반복된 것이다. 물론 이번에는 애초에 RedBrick 이라..

[WIL] SSAFY 1주차 회고
SSAFY/WIL 2024. 1. 7. 18:16

배운 것 1. Design Thiking Process 2. 협업 3. 남들이 '와!' 할만한 회사에 가기 위해 얼마나 많은 노력을 필요로 하는가 4. SSAFY 생활에 어떤 마음가짐과 어떤 목표로 임해햐 하는가 벌써 한 주가 지나고 첫 번째 일요일을 맞이했다. SSAFY 이전 나의 생활은 대충 아침에 스터디 깔짝하고 알고리즘 문제 한 개 풀고 게임하고... 공부하고 싶으면 공부하고... 운동 가고... 이런 삶의 반복이었기에 학습의 지속성이 존재하지 않았다. 정해진 것을 하는 게 아니라 마음 내키는 대로 했기 때문이다. 그래서인지 당시에는 하루하루가 굉장히 길게 느껴졌는데 SSAFY 를 시작하고 나서 정해진 커리큘럼에 따라 한 주를 보내고 매일 조금씩이지만 목표를 정해 할 일을 하다보니 시간이 엄청 빠..

article thumbnail
2448번. 별 찍기 - 11

아이디어 출력을 보고 유추할 수 있는 것은 N = 24 일 때의 별은 N = 12 일 때의 별을 3개 출력한 결과라는 것이다. 따라서 재귀함수를 활용하면 문제를 해결할 수 있을 것이라 생각했고 각 별이 출력되는 위치가 다르기 때문에 좌표와 별의 크기를 입력으로 받는 재귀함수를 만들면 된다고 생각했다. 해당 함수를 draw(int i, int j, int N) 이라고 가정하고 예제를 살펴보면 draw(0, 0, 24) -> draw(0, 12, 12) -> draw(12, 0, 12) -> draw(12, 24, 12) 와 같이 N = 24 짜리 별을 위해서 (0, 12) 에서 시작해 N = 12 인 별, (12, 0) 에서 시작해 N = 12인 별, (12, 24) 에서 시작해 N = 12 인 별을 출력..

[TIL] 스타트캠프 4일차
SSAFY/TIL 2024. 1. 5. 20:25

배운 점 오늘은 현업 개발자 특강 및 선배들과의 만남 시간이 진행되었다. 그리고 이 시간들은 지난 날의 나를 반성하게 만드는 시간이었다. 나는 늘 적당히 노력하면 적당히 결과도 나오는 삶을 살았는데 이 특강을 들으면서 그들이 일류 회사에 가기 위해 얼마나 많은 노력을 했는지를 알게 되었다. 나도 당연하게도 그런 좋은 회사를 가고 싶지만 그들만큼의 노력을 해야겠다는 생각을 해본 적 조차 없었고 다른 사람들이 그 정도로 노력하고 있는 줄도 몰랐다. 하지만 오늘을 계기로 다른 사람들이 좋은 회사, 원하는 목표를 이루기 위해 얼마나 많은 노력을 했는지 알게 되었으니 나도 마음을 고쳐먹고 스스로 '열심히 했다' 라고 느낄 수 있을 정도로 노력을 해야겠다.

article thumbnail
1987번. 알파벳

아이디어 백트래킹 알고리즘을 이용해서 현재 위치에서 더 이상 이동할 수 있는 칸이 없다면 이전 칸으로 복귀해 다른 경로를 탐색하는 방식으로 문제를 풀 수 있다. 추가로 문제에서 동일한 경로 상 동일한 알파벳을 여러 번 방문하는 것이 불가능하므로 이를 표현하기 위해 0 : A 25 : Z 를 의미하는 boolean 배열을 visited 배열로 활용하면 문제를 해결할 수 있다. 풀이코드 import java.io.*; import java.util.*; public class Main { static int result = 0; static int[] dx = {-1, 1, 0, 0}; static int[] dy = {0, 0, -1, 1}; static char[][] board; static boole..

article thumbnail
1504번. 특정한 최단 경로

아이디어 1. 1 번 노드에서 N 번 노드까지 주어진 두 정점을 반드시 지나치는 경로는 2개가 존재함 - 1 -> node1 -> node2 -> N - 1 -> node2 -> node1 -> N 2. 플로이드-워셜 알고리즘을 사용하면 모든 정점 간의 최단 경로를 알 수 있고 이를 활용해 (1 -> node1) + (node1 -> node2) + (node2 -> N) (1 -> node2) + (node2 -> node1) + (node1 -> N) 값을 비교해 최단 경로를 출력하면 된다. * 시간복잡도가 O(N^3) 이긴 하지만 N의 최대 크기가 800 이므로 800 * 800 * 800 = 64,000,000 이라 1초라는 제한 조건(보통 연산 1억번)을 통과할 수 있을 것이라 예상했는데 아니었..