오랜만에 알고리즘 카테고리에 글을 올려본다.
책에는 풀이시간 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);
}
}
'Study > 알고리즘' 카테고리의 다른 글
코딩테스트 입문 - 분수의 덧셈 (1) | 2022.10.14 |
---|---|
코딩테스트 입문 (0) | 2022.10.13 |
이것이 코딩 테스트다 - 그리디(거스름돈, 큰 수의 법칙) (0) | 2022.08.26 |
백준 1267번 - 핸드폰 요금 JAVA (0) | 2022.08.20 |
백준 1233번 - 주사위 JAVA (0) | 2022.08.11 |