반응형
코드트리 3주 차 블로그챌린지입니다.
저는 기업별 커리큘럼을 신청하였고 오늘은 삼성 커리큘럼을 풀어 보았습니다
이동경로상에 있는 모든 숫자 더하기 문제를 리뷰해보고자 합니다
https://www.codetree.ai/cote/13/problems/add-all-the-numbers-on-the-path/description
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
풀이방법
- 중앙에서 시작하므로 n/2, n/2가 시작점이 된다
- 명령에 따라 왼쪽, 오른쪽으로 회전한다
- 회전에 따라 바라보는 방향 인덱싱을 어떻게 할지가 중요하다
- 방문한 위치들의 값을 모두 더해서 출력한다
import java.util.*;
import java.io.*;
public class Main {
public static int[][] map, direction ={{-1,0},{0,1},{1,0},{0,-1}};
public static int dir;
public static char[] commands;
public static void main(String[] args) throws IOException{
// 여기에 코드를 작성해주세요.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken()), t = Integer.parseInt(st.nextToken());
commands = br.readLine().toCharArray();
map = new int[n][n];
for(int i=0; i<n; i++) {
map[i] = Arrays.stream(br.readLine().split(" " )).mapToInt(Integer::parseInt).toArray();
}
int x = n/2, y = n/2;
int sum = map[x][y];
for(char command : commands) {
if(command == 'F') {
int nx = x + direction[dir][0], ny = y + direction[dir][1];
if(isRange(nx, ny, n)) {
sum += map[nx][ny];
x = nx;
y = ny;
}
}
else if(command == 'R') dir = (dir + 1) % direction.length;
else dir = (dir - 1 < 0 ? direction.length-1 : dir-1); // 해설 dir = (dir+3) % direction.length;
}
System.out.println(sum);
br.close();
}
public static boolean isRange(int x, int y, int n) {
return x<0 || x>=n || y<0 || y>=n ? false : true;
}
}
왼쪽방향을 인덱싱하는 방법을 알아갔다
반응형
'일반' 카테고리의 다른 글
[코드트리 챌린지] 숫자가 가장 큰 인접한 곳으로 동시에 이동 (1) | 2023.10.09 |
---|---|
[코드트리 챌린지] 중앙값 계산2 (0) | 2023.10.02 |
[코드트리 챌린지] 빙빙 돌며 숫자 사각형 채우기 (0) | 2023.09.18 |
[코드트리 챌린지] 체크판 위에서2 (0) | 2023.09.11 |
코드트리 블로그챌린지 인증용 (0) | 2023.09.02 |