챌린지/코드트리 블로그 챌린지

[코드트리 챌린지] 1주차 (9.6 ~ 9.11)

imname1am 2023. 9. 11. 11:59
반응형

📍 서론

구름톤 챌린지가 끝나고,

또 다른 코딩테스트를 재밌게 연습할 수 없는 방법이나 챌린지가 없나 찾아보다가 시작하게 되었다.

 

학부생 때 학교 제휴 서비스 덕분에 코드트리 여름방학 캠프에 참여했었는데,

그 때는 진짜 알고리즘 개념 자체도 아예 모르고, 단순 구현이나 문자열 정도만 문제 풀 수 있었던 때였다...

(근데 왜 참가했지?ㅋㅋㅋ)

 

암튼 그 때 코드트리를 사용해보면서 UI도 깔끔하니 귀엽고 풀 문제도, 풀어내야 하는 시간도 적혀있어서

코딩테스트 연습할 때 굉장히 도움이 되겠단 생각이 들었다.

 

이제는 그래도 알고리즘 개념도 알고, 몇 번 실전 코테를 본 입장으로서

이번 코드트리 챌린지를 통해 현재 내가 취약한 부분을 더 확실하게 잡고,

코딩테스트 올솔을 위한 도약 과정에 도움이 될 수 있을거라 기대한다!

 

심지어 추첨을 통해 상품도 주신다 하고, 열심히 참여하면 기간별 그에 따른 보상도 주신다 하니...

이렇게 완벽한 동기부여가 될 수 없는!! +_+

(가장 완벽한 동기부여는 나의 코테 올솔이겠지만,,ㅎㅎ)

 

아직 문제 풀면서 나한테 부족한 점들이 많이 보이는데

이번 코드트리 챌린지를 통해 이를 보완하고

코테를 더 자주 통과해서 취뽀까지 더 가까워질 수 있으면 좋겠다!

 

 

 

📍 본론

◻ 실력진단 결과 및 학습 진단 요약

실력진단 및 학습 진단 요약은 아래와 같다!

어중간쓰ㅎㅎ

시뮬레이션 약한 거 들켜버렸다,,,,

마자요 시뮬레이션이 약해요ㅠㅠㅠㅠ

 

그렇다면 이제 실전에 들어가보자!

 

 

 


💜 학습 내용 : 격자에서의 dx, dy

- 격자는 2차원 배열로 표현

- 격자에서의 x,y는 행,열로 생각하자!

- 동서남북 (또는 상하좌우)으로 이동 시, x와 y 위치의 변화를 나타내는 int형 일차원 배열 dx, dy를 활용한다.

// 차례대로 동서남북
int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};

- 격자 안에 들어오는지 범위를 확인하는 조건문이 필요하다. (항상 if문 가장 앞에 작성하는 것이 중요!)

 

🧩 문제 : 1이 3개 이상 있는 위치

🔍 문제 해결 흐름

1. 모든 점에서 동서남북(또는 상하좌우)으로 이동해 각 점에서 인접한 칸에 1의 개수가 3개 이상인지를 구한다. (리턴형이 boolean형인 메소드 adj)

 ┕ 해당 인접 방향으로 이동 시, 범위를 벗어나면 안 되므로 격자 안에 들어오는지 판단한다. (Line 42)

 ┕ 이동 시에도 격자 안에 들어오고, 인접한 칸의 값이 1이라면 해당 위치와 인접한 곳에 있는 1의 개수 tmp를 1 증가한다.

 ┕ 해당 위치에 인접한 1의 개수 tmp가 3개 이상이면, true를 출력한다. (아니면 false를 출력한다.)

 

2. 만약 adj(x위치, y위치)가 true라면, 해당 점에서 인접한 1의 개수가 3개 이상이므로, 정답 갯수에 1을 더한다.

3. 인접한 칸에 숫자 1이 3개 이상 적혀있는 서로 다른 칸의 수를 출력한다!

 

 

🎯 풀이 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.util.*;
import java.io.*;
 
public class Main {
    static int[] dx = {0,0,-1,1};
    static int[] dy = {1,-1,0,0};
 
    static int N, cnt;
    static char[][] map;
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
 
        N = Integer.parseInt(br.readLine());
        map = new char[N][N];
 
        for(int i = 0 ; i < N ; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for(int j = 0 ; j < N ; j++) {
                map[i][j] = st.nextToken().charAt(0);
            }
        }
 
        for(int i = 0 ; i < N ; i++) {
            for(int j = 0 ; j < N ; j++) {
                if(adj(i, j))
                    cnt++;
            }
        }
 
        System.out.println(cnt);
    }
 
    private static boolean adj(int x, int y) {
        int tmp = 0;
 
        for(int d = 0 ; d < 4 ; d++) {
            int nx = x + dx[d];
            int ny = y + dy[d];
 
            if(nx < 0 || ny < 0 || nx >= N || ny >= N)    continue;
            if(map[nx][ny] == '1')  tmp++;
        }
 
        return tmp >= 3 ? true : false;
    }
}
cs

 


📍 결론

8주간 열심히 해보겠다!

올솔 가보자고!💪💪

 

 

 

#코드트리 #코딩테스트 #코딩테스트실력진단

반응형