class Solution {
fun solution(x: Int): Boolean {
var xString = x.toString().chunked(1);
var num = 0;
for (i in 0..xString.size-1) {
num += Integer.parseInt(xString[i]);
}
return if (x % num == 0) true else false;
}
}
테스트 1 〉
통과 (10.14ms, 64.1MB)
테스트 2 〉
통과 (8.73ms, 64.4MB)
테스트 3 〉
통과 (10.15ms, 63.7MB)
테스트 4 〉
통과 (12.17ms, 62.8MB)
테스트 5 〉
통과 (13.80ms, 64.3MB)
테스트 6 〉
통과 (11.47ms, 65MB)
테스트 7 〉
통과 (8.40ms, 64.9MB)
테스트 8 〉
통과 (11.43ms, 64.2MB)
테스트 9 〉
통과 (8.38ms, 63.9MB)
테스트 10 〉
통과 (8.27ms, 63.9MB)
테스트 11 〉
통과 (8.14ms, 65MB)
테스트 12 〉
통과 (8.55ms, 64.1MB)
테스트 13 〉
통과 (10.25ms, 64.5MB)
테스트 14 〉
통과 (9.44ms, 65.1MB)
테스트 15 〉
통과 (8.09ms, 64.9MB)
테스트 16 〉
통과 (8.55ms, 64.1MB)
테스트 17 〉
통과 (7.94ms, 63.8MB)
코틀린에서 문자열을 배열로 만드는 방법으론 split과 chunked 두 가지의 함수가 있다.
근데 자바와 같이 split("")은 계속 오류가 나서 코틀린에서는 구분자를 제대로 넣어야 진행할 수 있는 것 같고, 그래서 chunked(길이)를 이용하여 배열로 만들었다.
그리고 리턴할 때 역시 코틀린은 삼항 연산자가 없어서 x % num == 0 ? true : false 가 오류가 났고,
삼항 연산자를 쓸 수 없다는 것을 알게 되서 if (x % num == 0) true else false; 로 표현하였다.
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
ArrayList<Queue<Integer>> map = new ArrayList<>();
for (int i = 0; i < board.length; i++) {
Queue<Integer> q = new LinkedList<>();
for (int j = 0; j < board[i].length; j++) {
if (board[j][i] == 0) continue;
q.add(board[j][i]);
}
map.add(q);
}
Stack<Integer> s = new Stack<>();
for (int i = 0; i < moves.length; i++) {
Queue<Integer> q = map.get(moves[i]-1);
if (!q.isEmpty()) {
int num = q.poll();
int sNum = (!s.empty()) ? s.peek() : -1;
if (sNum != -1 && num == sNum) {
s.pop();
answer += 2;
} else {
s.push(num);
}
}
}
return answer;
}
}
테스트 1 〉
통과 (0.27ms, 79.9MB)
테스트 2 〉
통과 (0.24ms, 74.4MB)
테스트 3 〉
통과 (0.27ms, 83.6MB)
테스트 4 〉
통과 (2.65ms, 72MB)
테스트 5 〉
통과 (0.24ms, 78.3MB)
테스트 6 〉
통과 (0.38ms, 75.8MB)
테스트 7 〉
통과 (0.36ms, 77MB)
테스트 8 〉
통과 (1.08ms, 83.7MB)
테스트 9 〉
통과 (0.68ms, 77.8MB)
테스트 10 〉
통과 (0.82ms, 72.3MB)
테스트 11 〉
통과 (1.02ms, 75.2MB)
board에 들어 있는 블록을 세로 한 줄씩 정리할건데, 위에서부터 정의되어 있어서 제일 먼저 들어간 것을 꺼내는 Queue를 이용하여 정리했음.
정리한 Queue들은 ArrayList로 묶어서 map을 만들었고, moves 배열에서 하나씩 꺼내오면서 제일 마지막에 넣는 것을 꺼내는 스택으로 블록을 하나씩 넣는데, 만약 제일 위에 있는 것이 넣을 것과 같으면 스택 맨 마지막에 넣은 값을 없애고 answer에 +2를 하는 것으로 코드를 짰다.
import java.util.*;
class Solution {
public String solution(int[] numbers, String hand) {
boolean value = true;
int l = 10;
int r = 12;
if (hand.equals("right")){
value = false;
}
ArrayList<String> data = new ArrayList<>();
for (int i = 0; i < numbers.length; i++){
int a = numbers[i];
if (a == 0) a = 11;
boolean value2 = true;
if (a == 1 || a == 4 || a == 7){
value2 = true;
} else if (a == 3 || a == 6 || a == 9){
value2 = false;
} else {
int ll = 0;
int rr = 0;
int l2 = l;
int r2 = r;
while (l2 != a){
if (l2 - a == -1 || l2 - a == 1){
ll++;
break;
}
if (l2 > a){
l2 -= 3;
ll++;
} else {
l2 += 3;
ll++;
}
}
while (r2 != a){
if (r2 - a == -1 || r2 - a == 1){
rr++;
break;
}
if (r2 > a){
r2 -= 3;
rr++;
} else {
r2 += 3;
rr++;
}
}
if (ll > rr) {
value2 = false;
} else if (ll < rr){
value2 = true;
} else {
value2 = value;
}
}
if (value2){
data.add("L");
l = a;
} else {
data.add("R");
r = a;
}
}
return String.join("", data);
}
}