본문 바로가기
알고리즘&자료구조

이코테 - 상하좌우(구현)

by dongR 2021. 1. 23.

내가 푼 코드) 

		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt(); //공간의 크기 N
		ArrayList<String> list = new ArrayList<String>(); //이동할 방향이 담긴 리스트 
		int[] pointX = {1}; //초기 X 좌표(행) 
		int[] pointY = {1}; //초기 Y 좌표(열)
		
		//이동 가능한 횟수(1~100) 
		for(int i=0;i<100;i++) {
			String move = sc.next(); //이동할 방향(상,하,좌,우) 
			if(move.equals("End")) break;
			list.add(move);
		}
		
		//이동 시작 
		for(int i=0;i<list.size();i++) {
			
			if(list.get(i).equals("R")) { //열증가(오른쪽으로 1칸이동)  
				 if(pointY[0]+1>N) { //좌표평면 밖을 넘어갈 경우 
					 continue;
				 }
				 pointY[0] += 1; // Y좌표 1증가 
			}else if(list.get(i).equals("L")) { //열감소(왼쪽으로 1칸이동)
				 if(pointY[0]-1<1) { //좌표평면 밖을 넘어갈 경우 
					 continue;
				 }
				 pointY[0] -= 1; // Y좌표 1감소
			}else if(list.get(i).equals("U")) { //행감소(위쪽으로 1칸이동)
				 if(pointX[0]-1<1) { //좌표평면 밖을 넘어갈 경우 
					 continue;
				 }
				 pointX[0] -= 1; // X좌표 1감소
			}else{//행증가(아래쪽으로 1칸이동)
				if(pointX[0]+1>N) { //좌표평면 밖을 넘어갈 경우 
					 continue;
				 }
				 pointX[0] += 1; // X좌표 1증가
			} 
			
		}
		
		System.out.println("최종 X좌표:"+pointX[0]);
		System.out.println("최종 Y좌표:"+pointY[0]);

시작 좌표를 배열에 담을 필요가 없었는데... 요구사항을 잘 읽고 문제에 나와있는 데로 풀기 

 

 

다른 코드) 

		Scanner sc = new Scanner(System.in);
		
		// 공간의 크기 N 입력받기 
		int n = sc.nextInt();
		sc.nextLine();
		// 이동할 방향들을 공백 단위로 입력받아서 배열에 넣음 
		String[] plans = sc.nextLine().split(" ");
		int x=1,y=1; // 시작좌표 설정 (X - 행 , Y - 열) 
		
		int[] dx = {0,0,-1,1}; //U,D(행이동) 
		int[] dy = {-1,1,0,0}; //L,R(열이동) 
		char[] moveTypes = {'L','R','U','D'}; // 이동 방향 타입  
		
		//입력받은 뱡향만큼 for문을 돔 
		for(int i=0;i<plans.length;i++) {
			//plans 라는 문자열 배열에서 인덱스 번호에 해당되는 문자를 가져옴 
			char plan = plans[i].charAt(0);
			
			int nx = 0,ny = 0; // 이동후 좌표값 
			for(int j=0;j<moveTypes.length;j++) {
				if(plan == moveTypes[j]) {
					nx = x + dx[j];
					ny = y + dy[j];
					break;
				}
			}
			
			//좌표 공간을 벗어나는 경우 
			if(nx<1 || ny<1 || nx > n || ny > n) continue;
			//이동 진행 
			x = nx;
			y = ny;	
		}
		
		System.out.println(x+" "+y);

nextInt() 메소드는 엔터 전까지 입력받기 때문에 nextLine() 메서드를 한번 더 써서 Enter값을 없애고 새롭게 값을 입력받을 수 있도록 함 

'알고리즘&자료구조' 카테고리의 다른 글

이코테 - 게임개발  (0) 2021.01.26
이코테 - 왕실의 나이트  (0) 2021.01.24
이코테 - 숫자카드게임  (0) 2021.01.19
1517 버블소트  (1) 2020.09.27
1037 약수  (0) 2020.09.18