-
[swea] 1210. Ladder알고리즘 문제 풀이/sw아카데미 2021. 4. 17. 22:25
문제설명
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
기본아이디어
처음 문제를 읽었을 때는 그냥 조건대로 풀었다. 시작점부터 찾아가서 마지막행이 2 이면 찾고 종료 아니면 다시 다음 시작점에서 시작하는 방식으로 풀었다.
하지만 다른 더 좋은 풀이가 있어서 가져왔다. 내 방식과 다른 점은 크게 1. 도착점부터 찾아가는게 다르다 2. 사다리는 결국 일자로 내려오기 때문에 왼쪽 오른쪽 이동할 때 옆의 사다리로 한번에 이동하는게 가능하다. 그런 방식으로 List에 사다리의 번호대로 열번호를 저장해두면 사용 가능합니다.
구현코드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950public static void main(String[] args) throws IOException {int T = 10;for(int test_case = 1; test_case <= T; test_case++){input.readLine();int[][] map = new int[100][];StringTokenizer input_str;for(int i = 0; i < 100; i++) {input_str = new StringTokenizer(input.readLine());int[]temp = new int[100];for (int j = 0; j < 100; j++)temp[j] = Integer.parseInt(input_str.nextToken());map[i] = temp;}for(int i = 0; i < 100; i++){if(map[0][i] == 0)continue;int r = 0;int c = i;while(r < 99){if(c+1 < 100 && map[r][c + 1] == 1)do{c++;if(map[r+1][c] == 1) {r++;break;}}while(c+1 < 100 && map[r][c + 1] == 1);else if(c-1 >= 0 && map[r][c -1] == 1)do{c--;if(map[r+1][c] == 1) {r++;break;}}while(c-1 >= 0 && map[r][c -1] == 1);elser++;}if(map[r][c] == 2){output.append("#" + test_case + " " + i + "\n");break;}}}System.out.print(output);}cs 1234567891011121314151617181920212223242526272829303132333435363738394041424344public static void main(String args[]) throws Exception{BufferedReader br = new BufferedReader(new InputStreamReader(System.in));for (int tc = 0; tc < 10; tc++) {int N = Integer.parseInt(br.readLine());int[][] Ladder = new int[100][100];int x = 0;int y = 0;int number = 0;int idx = 0;ArrayList<Integer> first = new ArrayList<>();for (int i = 0; i < Ladder.length; i++) {String[] s = br.readLine().split(" ");for (int j = 0; j < Ladder[i].length; j++) {Ladder[i][j] = Integer.parseInt(s[j]);if(i == 0 && Ladder[0][j] == 1) {first.add(j);}if (Ladder[i][j] == 2) {number = j;}}}for(int i = 0; i < first.size(); i++) {if(first.get(i) == number)idx = i;}// System.out.println(number);for (int i = Ladder.length - 1; i >= 0; i--) {if (number - 1 >= 0 && Ladder[i][number - 1] == 1) {number = first.get(--idx);} else if (number + 1 < Ladder[i].length && Ladder[i][number + 1] == 1) {number = first.get(++idx);}}System.out.println("#" + N + " " + number);}}cs 정리, 기억할 내용
1. 문제를 잘 읽어보고 풀자.
2. 일반화 할 수 있는 내용이 있는지 살펴보자.
'알고리즘 문제 풀이 > sw아카데미' 카테고리의 다른 글
[swea] 8382. 방향 전환 (0) 2021.04.21 [swea] 5607. 조합 (0) 2021.04.21 [swea] 9280. 규영이와 인영이의 카드게임 (0) 2021.04.17 [swea] 7393. 대규의 팬덤활동 (0) 2021.04.17 [swea] 5656. 벽돌 깨기 (0) 2021.04.15