πŸ‘©β€πŸ’» SWEA_1210_Ladder1

YOU KNOW I MEANΒ·2021λ…„ 4μ›” 24일
0
post-thumbnail

πŸ’¬ μ™„μ „νƒμƒ‰μœΌλ‘œ ν’€κ³  μ‹Άμ—ˆλŠ”λ° λ©”λͺ¨λ¦¬μ΄ˆκ³Όκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 3κ΅¬κ°„μœΌλ‘œ λ‚˜λˆ  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.


πŸ’‘ 풀이 방법

첫번째 μ‹œλ„

  • 도착지점뢀터 μΆœλ°œν•΄ μΆœλ°œμ§€μ μ„ μ°Ύκ³ μžν–ˆμŠ΅λ‹ˆλ‹€.
  • μ•„λž˜ 지점은 탐색을 μ•ˆν•΄λ„ λ˜λ‹ˆ μ™Όμͺ½, 였λ₯Έμͺ½, μœ„μͺ½μ„ νƒμƒ‰ν•˜κ³  μ™Όμͺ½, 였λ₯Έμͺ½μœΌλ‘œ 가지 λͺ»ν•  경우 μœ„μͺ½μœΌλ‘œ 가도둝 ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • 이미 μ§€λ‚˜μ˜¨ 길은 방문처리λ₯Ό ν•΄μ£Όμ–΄ μ™”λ˜ 길을 λ‹€μ‹œ 가지 μ•Šλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λ‘λ²ˆμ§Έ μ‹œλ„

  • λ°©λ¬Έ 처리λ₯Ό ν•˜λ‹ˆ λ©”λͺ¨λ¦¬ μ΄ˆκ³Όκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
  • ν™•μΈν•˜λŠ” 수λ₯Ό μ€„μ΄κ³ μž flag λ₯Ό 두어 μ™Όμͺ½, 였λ₯Έμͺ½, μœ„μͺ½μΈμ§€ νŒŒμ•…ν•œ ν›„ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.
  • μ½”λ„ˆλ₯Ό λ„λŠ” 뢀뢄일 경우 flag 에 ν•΄λ‹Ήν•˜λŠ” κ°’λ§Œ κ°€λŠ₯ μ—¬λΆ€λ₯Ό ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.
  • μ™Όμͺ½, 였λ₯Έμͺ½μ΄ λͺ¨λ‘ μ•ˆλ˜λ©΄ flag λ₯Ό μœ„μͺ½μœΌλ‘œ κ°’μœΌλ‘œ μ„€μ •ν•˜κ³  μœ„λ‘œ ν•œμΉΈ μ΄λ™ν–ˆμŠ΅λ‹ˆλ‹€.

μ„Έλ²ˆμ§Έ μ‹œλ„

  • μ‹œκ°„ μ΄ˆκ³Όκ°€ μΌμ–΄λ‚¬μŠ΅λ‹ˆλ‹€.
  • μ•Œκ³ λ³΄λ‹ˆ μ΄λ™ν•˜λŠ” 값을 λ°°μ—΄λ‘œ μ„€μ •ν•΄μ£Όμ—ˆλŠ”λ° int ny = start_j - dy[k]; λΉΌμ£Όμ–΄μ„œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
  • int ny = start_j + dy[k]; 둜 λ³€κ²½ν•˜λ‹ˆ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ”₯ μ½”λ“œ

package algorithm;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class SWEA_1210_Ladder1 {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int dx[] = { 0, 0 };
		int dy[] = { -1, 1 };
		for (int t = 1; t <= 10; t++) {
			int T = Integer.parseInt(br.readLine());
			int answer = 0;
			int ladder[][] = new int[100][100];
			int start_j = 0;
			int start_i = 99;

			// 배열에 μ €μž₯
			for (int i = 0; i < 100; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				for (int j = 0; j < 100; j++) {
					int tmp = Integer.parseInt(st.nextToken());
					ladder[i][j] = tmp;
					if (tmp == 2) {
						start_j = j;
					}
				}
			}

			// 탐색
			int flag = 2;
			while (true) {
				if (start_i == 0) {
					answer = start_j;
					break;
				}

				// μœ„μͺ½
				if (flag == 2) {
					start_i -= 1;
					for (int k = 0; k < 2; k++) {
						int ny = start_j + dy[k];
						if (ny == -1 || ny == 100 || ladder[start_i][ny] == 0) {
							continue;
						}
						flag = k;
					}
				}

				// μ™Όμͺ½ ν˜Ήμ€ 였λ₯Έμͺ½
				else {
					if (flag == 0) {
						int ny = start_j - 1;
						if (ny == -1 || ladder[start_i][ny] == 0) {
							flag = 2;
							continue;
						}
						start_j = ny;
					} else if (flag == 1) {
						int ny = start_j + 1;
						if (ny == 100 || ladder[start_i][ny] == 0) {
							flag = 2;
							continue;
						}
						start_j = ny;
					}
				}
			}
			System.out.println("#" + T + " " + answer);
		}
	}
}

πŸ€” λ°œμ „ λ°©ν–₯

  • λ²”μœ„μ— λ²—μ–΄λ‚˜μ§€ μ•ŠλŠ”μ§€ μ²΄ν¬ν•˜λŠ” λΆ€λΆ„κ³Ό λ°˜λ³΅λ˜λŠ” μ½”λ“œλ₯Ό ν•¨μˆ˜λ‘œ 묢을 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보