상세 컨텐츠

본문 제목

2022년 4월 21일 - [1차]해시, 삼각 달팽이 복습

컴퓨터 공부/코딩테스트 스터디

by 주중 (zuzung) 2022. 4. 21. 10:48

본문

1. [1차]해시

본 문제는 기존에 파이썬을 이용해서 한번 풀었었다. 쉽게 풀 수 있는 문제라서 문제를 보고 필요한 조건을 생각한 뒤 자바로 변경했다. 그런데 자바를 오랜만에해서 그런가 toLowerCase()메소드나 ArrayList 삽입, 삭제 메소드가 헷갈렸다. 계속 적응해나가야겠다!

아래의 코드에서 잠시 잊었던 부분은 cache.size > 0 부분인데, 이 부분은 cache의 크기가 0일 경우는 제외하기 위해서 적용되는 조건이다. 다음에는 문제만 봐도 바로 풀 수 있겠다!

import java.util.*;

class Solution {
    public int solution(int cacheSize, String[] cities) {
        ArrayList<String> cache = new ArrayList<String>(cacheSize);
        int answer = 0;
        for(String i : cities){
            i = i.toLowerCase();
            if(cache.contains(i)){
                cache.remove(i);
                cache.add(i);
                answer += 1;
            }else{
                if(cache.size() > 0 && cache.size()==cacheSize)
                    cache.remove(0);
                if(cache.size() < cacheSize)
                    cache.add(i);
                answer += 5;
            }
        }
        return answer;
    }
}

 

2. 삼각 달팽이

이 문제는 위치를 변경하는데에서 막혔었던 문제이다. 다시 한번 풀 때, 조건 부분에서 헷갈려서 다시 풀었던 문제를 보면서 코드를 작성했다. 그런데 분명이 arraylist -> array로 바로 바꿀 수 있을텐데 아직 잘 모르겠다 ;ㅅ;

그런데 보니까 어떤 사람은 n*(n+1)/2 크기의 배열을 만들어서 굳이 arraylist를 사용안하던데 좋은 방법같다. 내 코드는 그 부분처리하느라 불필요한 부분이 너무 길다..

아래는 다른 사람의 문제풀이 방식인데, 배열을 이용하지 않고 3으로 나눴을 때 나머지값을 이용하여 구분해서 처리했다. 이런 풀이방식도 괜찮은 것 같다.

이런방식으로도 풀 수 있다.

나는 아래처럼 문제를 풀었다. 다음에 또 풀어봐야 알 거 같다. dx, dy관리하는 부분에서 막혔었어서 꼭 한번 다시 풀어봐야한다.

 

import java.util.*;

class Solution {
    public int[] solution(int n) {
        int[][] answer = new int[n][n];
        int[] dx = {1, 0, -1};
        int[] dy = {0, 1, -1};
        int num = 1;
        int x = 0;
        int y = 0;
        int d = 0;
        while(num <= n*(n+1)/2){
            answer[x][y] = num++;

            int nx = x + dx[d];
            int ny = y + dy[d];

            if(0<=ny && ny<=nx && 0<=nx && nx<n && answer[nx][ny] == 0){
                x = nx;
                y = ny;
            }else{
                d = (d+1)%3;
                x += dx[d];
                y += dy[d];
            }

        }

        ArrayList<Integer> list = new ArrayList<>();

        for(int[] t: answer){
            for(int j = 0; j<t.length; j++){
                if(t[j]!=0)
                    list.add(t[j]);
            }
        }

        int[] result = new int[list.size()];

        for(int t=0; t<result.length; t++){
            result[t] = list.get(t);
        }

        return result;
    }
}

관련글 더보기

댓글 영역