inflearn logo
강의

Course

Instructor

Java Coding Test - IT Conglomerate Problem Set

비밀번호

65

tkv00

5 asked

0

package 인프런.시뮬레이션_복습01;

import java.util.HashMap;
import java.util.Map;

public class 비밀번호 {
    public static class Point{
        int row;
        int col;
        Point(int row,int col){
            this.row=row;
            this.col=col;
        }
    }

    private static Map<Integer,Point> map;
    private static final int INF=3;
    private static int getDistance(int row1,int col1,int row2,int col2){
        return (int)Math.pow(row1-row2,2) + (int)Math.pow(col1-col2,2);
    }
    private static boolean isValid(int dis){
        //거리가 대각선 포함 이동시간이 1인 경우
        if(dis<=2) return true;
        return false;
    }
    static class Solution {
        public int solution(int[] keypad, String password){
            int time = 0;
            map=new HashMap<>();

            for(int i=0;i<INF*INF;i++){
                map.put(keypad[i],new Point(i/3,i%3));
            }
            String[] inputs=password.split("");
            /**
             * 시작 값 초기화
             */
            int nowX=map.get(Integer.parseInt(inputs[0])).row,nowY=map.get(Integer.parseInt(inputs[0])).col;

            for(int i=1;i<inputs.length;i++){
                int x=Integer.parseInt(inputs[i]);
                int nRow=map.get(x).row;
                int nCol=map.get(x).col;

                if(nowX==nRow && nowY==nCol) continue;
                if(isValid(getDistance(nowX,nowY,nRow,nCol))){
                    time++;
                }else{
                    time+=2;
                }
                nowX=nRow;
                nowY=nCol;
            }


            return time;
        }

        public static void main(String[] args){
            Solution T = new Solution();
            System.out.println(T.solution(new int[]{2, 5, 3, 7, 1, 6, 4, 9, 8}, "7596218"));
            System.out.println(T.solution(new int[]{1, 5, 7, 3, 2, 8, 9, 4, 6}, "63855526592"));
            System.out.println(T.solution(new int[]{2, 9, 3, 7, 8, 6, 4, 5, 1}, "323254677"));
            System.out.println(T.solution(new int[]{1, 6, 7, 3, 8, 9, 4, 5, 2}, "3337772122"));
        }
    }
}

해시맵을 사용하여 풀었는데 이 방법도 시간 복잡도 혹은 공간 복잡도면에서 괜찮나요??

java 코딩-테스트

Answer 1

0

codingcamp

안녕하세요^^

네. 해시맵으로 해도 괜찮을 것 같습니다.

만약 시험에 이와 같은 문제가 나온다면 영상을 방법을 추천합니다.

과일 가져가기 이러한 경우에는 반례가 생기지 않나요?

0

161

2

cpu 스케줄링

0

105

2

외부 문제 질문

0

122

2

가장 많이 사용된 회의실

0

117

2

심사위원 문제 시간복잡도 질문

0

127

1

현관문 출입순서

0

96

1

미로의 최단거리 통로

0

74

1

집으로 이동 문제 코드

0

124

1

채점 사이트 개설

0

161

2

송아지를 잡자

1

110

1

다익스트라 + 환승횟수

0

135

2

문제풀이 해설 질문입니다.

0

124

2

"이동 횟수" 문제가 변형된다면?

0

155

2

예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ

0

248

1

"비밀번호" 문제 확인 부탁드립니다!

0

170

1

최대 길이 연속수열 질문

0

192

1

잃어버린 강아지 문제 count 관련 질문있습니다

0

202

1

바둑대회 질문입니당

0

221

1

5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다

0

310

1

알파코드 풀이질문입니다

0

216

1

7번 비밀 번호 문제에 시간복잡도가 궁금합니다!

0

162

1

혹시 이렇게 작성해도 괜찮나요?

0

284

2

문제풀이 확인 부탁드립니다.

0

244

1

혼자서 푼 문제 확인 부탁드립니다.

0

298

1