class Solution {
public String nextClosestTime(String time) {
StringBuilder sb = new StringBuilder();
Map<Character, Integer> avail = new HashMap<Character, Integer>();
char[] larger = new char[5];
larger = time.toCharArray();
Arrays.sort(larger);
for (int j = 0; j < 4; j++) {
avail.put(larger[j], j);
}
boolean found = false;
int l = 4;
while (l >= 0 && ! found) {
if (avail.get(l) < 3) {
found = true;
} else {
l--;
}
}
return null;
}
private int larger(String time, int loc) {
return 0;
}
}
다 풀진 못했읍니다..
일단 사이즈별로 정렬
뒤에서부터 앞으로 오는데 혹시 들어갈 수 있는 더 큰 숫자가 있으면 그걸로 냅다 바꿔줌
그거보다 앞에 있는 것은 원래 것으로 유지
그거보다 뒤에 있는 것은 가장 작은 숫자로 바꿔치기
이렇게 하려고 했는데 limit들을 못걸고 끝냄..
리밋은
ㅁㅁ:ㅁㅁ
첫: 0, 1, 2만 가능
둘: 0, 1일때는 다 가능, 2면 0, 1, 2, 3 만 가능
셋: 0-5까지만 가능
넷: 다 가능
이런 constraints들을 넣지 못했다는점..
전씨 풀었다는데 대단해요^^
class Solution {
public int kEmptySlots(int[] bulbs, int k) {
//create ranges
int[] ranges = new int[bulbs.length];
ranges[bulbs[0]] = 1;
boolean found = false;
for (int i = 1; i < bulbs.length; i++) {
ranges[bulbs[i - 1]] = 1;
if (i > k && ranges[bulbs[i] - k - 1] == 1) {
for (int j = bulbs[i] - k - 1; j < i; j++) {
if (ranges[j] == 1) {
found = false;
break;
} else {
found = true;
}
}
if (found) {
return i;
}
}
if (i + k < bulbs.length && ranges[bulbs[i] - k - 1] == 1) {
for (int j = bulbs[i] - k - 1; j < i; j++) {
if (ranges[j] == 1) {
found = false;
break;
} else {
found = true;
}
}
}
}
}
}
1번 에지 케이스가 너무 많은거 같아서 2번으로 넘어갔는데 한놈만 조질걸...^^
시간만 날렸읍니다
이놈은.. 일단 bulb.lngth와 같은 사이즈의 array를 만들어 준 다음에
지정된 위치에 있는 bulb를 1로 바꿔줍니다
그리고 우리가 찾고있는 k 만큼 떨어진 bulb가 혹시 켜졌는지 알아보고
만약 켜져있다면 그 사이에 있는 숫자들 중 1이 없는지 확인
만약에 끝까지 1이 없다면 성공~~
앞, 뒤로 확인해야 하고 숫자에 -1 빼줘야 하는지 아닌지
위치가 제대로 맞고 있는지 등 확인할 게 많아서 푸는데 한참 걸릴 것 같네요
그래도 개인적으로 1번보다는 덜 귀찮다고 생각합니다..^^
이놈만 조질걸