본 문제는 기존에 파이썬을 이용해서 한번 풀었었다. 쉽게 풀 수 있는 문제라서 문제를 보고 필요한 조건을 생각한 뒤 자바로 변경했다. 그런데 자바를 오랜만에해서 그런가 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;
}
}
이 문제는 위치를 변경하는데에서 막혔었던 문제이다. 다시 한번 풀 때, 조건 부분에서 헷갈려서 다시 풀었던 문제를 보면서 코드를 작성했다. 그런데 분명이 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;
}
}
2022년 4월 22일 - 빛의 경로 사이클 (0) | 2022.04.25 |
---|---|
2022년 4월 20일 - 124 나라의 숫자 lv2 (0) | 2022.04.20 |
2022년 4월 19일 - 구명보트 lv2 (0) | 2022.04.20 |
2022년 4월 18일 - 다원탐색 트리, B-트리, Red black 트리 (0) | 2022.04.20 |
2022년 4월 15일 - BST, AVL 트리 (0) | 2022.04.20 |
댓글 영역