Study/알고리즘

이것이 코딩 테스트다 JAVA - 구현 (상하좌우, 시각)

토기발 2022. 10. 11. 21:56

오랜만에 알고리즘 카테고리에 글을 올려본다.

책에는 풀이시간 15분이라고 써있었지만 15분만에 풀지는 못했다...ㅇ<-<

 

상하좌우 문제는 구현 중 시뮬레이션 유형이다. (일련의 명령에 따라 개체를 차례대로 이동시킨다는 점에서)

public class Main {
	public static void main(String[] args) throws Exception{
		 Scanner in = new Scanner(System.in);
		 int N = in.nextInt(); //공간의 크기
		 in.nextLine();
		 String plan = in.nextLine(); //이동할 계획을 받음
		 String[] plans = plan.split(""); //받은 계획을 하나씩 쪼개서 배열에 넣는다.
		 int x = 1;
		 int y = 1;//x축, y축
		 for(int i=0; i<plans.length; i++) {
			 if ("L".equals(plans[i])) { 
				 y-=1;				//L을 받으면 y축을 -1한다.
				 if(y==0)y+=1;		//y축이 0이 되면 1로 돌려놓는다.
			 }else if("R".equals(plans[i])) {
				 y+=1;
				 if(y==N+1)y-=1;
			 }else if("U".equals(plans[i])) {
				 x-=1;
				 if(x==0)x+=1;
			 }else if("D".equals(plans[i])){
				 x+=1;
				 if(x==N+1)x-=1;
			 }
		 }
		 
		 System.out.printf("%d %d",x,y);
		 
	}
}

이런 좌표값 구하는 문제가 나오면 머리가 하얗게 될 때가 있는데 처음부터 x,y값을 한번에 움직이려고 하지 않고 하나씩 움직인다고 생각하면 조금 더 쉽게 풀리는 것 같다. 

 

 

 

시각은 완전 탐색 유형이다.

완전 탐색 알고리즘은 가능한 경우의 수를 모두 검사해보는 탐색 방법이다.

for문을 3개 돌려서 1초씩 계속 늘려가며 3이 들어가는 경우의 수만 카운트하였다.

public class Main {
	public static void main(String[] args) throws Exception{
		 Scanner in = new Scanner(System.in);
		 int N = in.nextInt(); //입력받는 시각
		 int count = 0;
		 for(int i=0; i<=N; i++) {//시
			 for(int j=0; j<60; j++) {//분
				 for(int k=0; k<60; k++) {//초
					 if (i%10 == 3 || j/10 == 3 || j%10 == 3 || k/10 == 3 || k%10 == 3){
						 //3이 들어가는 경우의 수
						 count++;
					 }
				 }
			 }
		 }
		System.out.println(count);
	}
}