class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
int c1 = 0;
int c2 = 0;
for(int i = 0; i < goal.length; i++) {
if(c1 < cards1.length && cards1[c1].equals(goal[i])) {
c1++;
} else if (c2 < cards2.length && cards2[c2].equals(goal[i])) {
c2++;
} else {
return "No";
}
}
return "Yes";
}
}
인덱스를 따로 둬서 순서대로 되어있는지 체크하면 끝
문제 7 - 둘만의 암호
1. 빠르게 조회하기 위해 list에 넣어 포함되어 있는지 안 되어있는지 확인
2. 속도를 위해 StringBuilder 사용해서 append 실행
import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
// 1. 쉬운 탐색을 위해 list로 변환
List<Character> skipList = new ArrayList<>();
for(int i = 0; i < skip.length(); i++) {
skipList.add(skip.charAt(i));
}
StringBuilder result = new StringBuilder();
// 2. 순회하며 확인
for(char c : s.toCharArray()) {
char cCount = c;
for(int i = 1; i <= index; i++) {
cCount++;
if(cCount > 'z') {
cCount = 'a';
}
if(skipList.contains(cCount)) {
i--; // cCount의 횟수만 증가시키고 반복은 한번 더 실행
}
}
result.append(cCount);
}
return result.toString();
}
}
🔎 접근법
1. 문자열을 숫자로 바꿔야 함
2. 슬라이딩 사용
class Solution {
public int solution(String t, String p) {
int start = 0;
int end = p.length();
int count = 0;
while(start + p.length() <= t.length()) {
long num = Long.parseLong(t.substring(start,end));
if (num <= Long.parseLong(p)) count++;
start++;
end++;
}
return count;
}
}
long이랑 int 땜에 런타임 에러 발생할 수도 있구나
🔎 접근법
1. map으로 인덱스 저장해서 갱신
import java.util.*;
class Solution {
public int[] solution(String s) {
int[] result = new int[s.length()];
Map<Character, Integer> map = new HashMap<>();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(map.containsKey(c)) {
result[i] = i - map.get(c);
} else {
result[i] = -1;
}
map.put(c, i);
}
return result;
}
}
문제 10 - 부족한 금액 계산
Ezzzzzzzzzzz
class Solution {
public long solution(int price, int money, int count) {
long sum = 0;
for(int i = 1; i <= count; i++) {
sum += price * i;
}
long answer = sum - money;
return answer >= 0 ? answer : 0;
}
}
class Solution {
public int solution(String s) {
int sameCount = 0;
int difCount = 0;
int count = 0;
int index = 0;
for(int i = 0; i < s.length(); i++) {
if(s.charAt(index) == s.charAt(i)) sameCount++;
else difCount++;
if (sameCount == difCount) {
count++;
index = i + 1;
sameCount = 0;
difCount = 0;
}
}
if(sameCount > 0 || difCount > 0) {
count++;
}
return count;
}
}
변수가 좀 많긴한데 먼가 뿌듯한 코드 ^ㅁ^
우선순위 큐 쓰면 될 것 같습니더
import java.util.*;
class Solution {
public int[] solution(int k, int[] score) {
int[] answer = new int[score.length];
PriorityQueue<Integer> que = new PriorityQueue<>((o1, o2) -> {
return o1 > o2 ? 1 : -1;
});
for(int i = 0; i < score.length; i++) {
que.add(score[i]);
if(que.size() > k) {
que.poll();
}
answer[i] = que.peek();
}
return answer;
}
}
간단히 정리
큐 추가 : que.add()
큐 삭제 : que.poll()
큐 사이즈 : que.size()
큐 맨 마지막에 있는 거 출력 : que.peek()
약수를 우째 구하지 --> 제곱근 사용 !!! Math.sqrt() ==> double형 리턴
class Solution {
public int solution (int number, int limit, int power) {
// 1 -> 1* 1
// 2 -> 1 * 2
// 3 -> 1 * 3
// 4 -> 1 * 4 | 2 * 2
int sum = 0;
for(int i = 1; i <= number; i++) {
int count = 0;
for(int j = 1; j <= (int)Math.sqrt(i); j++) {
if(i % j == 0) count += 2;
if(j * j == i) count -= 1;
}
sum += count > limit ? power : count;
}
return sum;
}
}
<중요>
-> 나머지가 0인 건 count + 2
-> 자기 자신 곱한 건 -1