카테고리 없음

[코드트리 챌린지] 7주차 - 반복되는 슬럼프, 극복을 위한 마인드 세팅

꽁난이 2023. 10. 23. 15:15

오늘은 평소와 달리 무게를 잡고 진지하게 고민해본다. 

코드트리 챌린지를 약 2달 가량 진행하면서 나의 실력은 어느정도 성장하였는가를 파악하였다. 

코드트리에서 내 수준은 현재 상위 62.93%이다. 

점수는 500점을 턱걸이로 넘기긴했지만 상위 백분율은 큰 변화가 없다. 시즌 베스트 돌파 이후 계속 제자리 걸음이라는 것이다.

(크고 작은 점수는 무의미한 것 같다.)

계속 제자리걸음인 내 점수

아쉽다. 많이 아쉽다. 

죽어라 열심히 한 것은 물론 아니다. 시간을 투자한만큼 나온 결과라고 생각하면 마음이 편하다. 

그래도 다른 친구들에 비해 나의 이해가 느린 것이 참으로 통탄스러울 뿐이다.

 

물론 1차 고비였던 다차원 배열 슬럼프를 벗어났을 때, 이를 이겨냈던 짜릿함은 잊을 수 없다. 

나는 프로그래밍에 재능도 없고, 완전 재밌어서 미쳐서 밤 샐 수 있을 정도의 열정도 없지만

그럼에도 불구하고 너는 왜 이 일을 계속하고 있냐 누군가 묻는다면 이 잠깐의 짜릿함이 좋아서 이 일을 포기하지 못하고 있다고 대답할 것 같다.

 

하지만 지금 나의 심리상태는 지난 달과 다르다. 짜증이 난다. 스트레스를 받는다. 왜냐고?  시간이 얼마 남지 않았기 때문이다. 

1차 슬럼프 이후, 찔끔찔끔 점수를 올리다보니 뭔가 자신감이 붙었던 것일까? 오만했던 것일까?  헛바람이 들어간 것 같다. 

계속 같은 진단 결과가 나오고, 이를 계속해서 해결하지 못하는 내 스스로에게 자책의 마음이 든다. 

 

물론 나의 첫 진단평가 점수는 아주 충격적이긴했다. 

내 현재 여유 시간대를 기준으로 챌린지를 끝냈을 경우, 예상 점수가 524점이었다. 얼마 안남긴했다. 성장하긴 했다. 느껴진다. 

업무 코드를 보면 전보다 다른 시각으로 보게 된 것이 체감된다. 

하길 잘했다는 생각 많이 든다. 좋은 프로그램이다. 하지만 왜 나는 기분이 좋지 않고, 내 스스로를 압박하는 것일까 

 

과연 나는 남은 챌린지 기간동안 마지막 약점인 시뮬레이션 파트를 극복할 수 있을까?

결과는 다음주면 나오겠지.. 지금 해야할 것은 이런 죽는 소리할 것이 아니라 그저 앞으로 나아가야할 뿐인 것을 잘 알고 있다. 

일주일 뒤, 웃으며 이 챌린지를 마무리 할 수 있도록 앓는소리 보다는 그저 최선을 다해보자 

 

[오늘의 문제] dx, dy 테크닉 파트 

문제

좌표평면 위 (0, 0)에서 북쪽을 향한 상태에서 움직이는 것을 시작하려 합니다. N개의 명령에 따라 총 N번 움직이며, 명령 L이 주어지면 왼쪽으로 90도 방향 전환을, 명령 R이 주어지면 오른쪽으로 90도 방향전환을 하고, 명령 F가 주어지면 바라보고 있는 방향으로 한칸 이동하려고 합니다. 이동 이후 최종 위치를 출력하는 프로그램을 작성해보세요.

입력

첫 번째 줄에 문자 ‘L', ‘R', 그리고 'F’로만 이루어진 문자열이 하나 주어집니다.

  • 1 ≤ 명령의 길이 ≤ 100,000

입력 예

LF

출력

최종 위치 (x, y)를 공백을 사이에 두고 출력합니다.

출력 예

-1  0 

 

풀이 

나는 문자열을 받고, 이를 char 형태의 배열로 만들어 로직을 처리했다. 

핵심 코드는 이 부분이 아닐까 싶다.

1. 90도 회전했을때와 역회전 했을 때의 구현 방법

2. x와 y의 값을 계속 누적시키며 변화시켜야 한다는 것 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner s = new Scanner(System.in);

        int[] dx = new int[] {1, 0, -1, 0};
        int[] dy = new int[] {0, -1, 0, 1};

        int x = 0; 
        int y = 0;

        // 북쪽을 기준 (동남서북)
        int dirNum = 3; 

        String command = s.nextLine(); 
        char[] cArr = command.toCharArray();

        if (cArr.length > 100000 || cArr.length < 1) {
            throw new IllegalArgumentException("Invalid Input length");
        }

        for (int i = 0; i < cArr.length; i++) {
            if (cArr[i] == 'L') {
                // 역회전 (왼쪽으로 90도 방향)
                dirNum = (dirNum - 1 + 4) % 4;
            } else if (cArr[i] == 'R') {
                // 오른쪽으로 90도 회전 
                dirNum = (dirNum + 1) % 4;
            } else {
                // 그냥 한 칸 이동 
                if (dirNum == 0) {
                    x += dx[0];
                } else if (dirNum == 1) {
                    y += dy[1];
                } else if (dirNum == 2) {
                    x += dx[2];
                } else {
                    y += dy[3];
                }
            }
        }

        System.out.println(x + " " + y);
    }
}