
문제 - 저주의 숫자 3

class Solution {
public int solution(int n) {
int answer = 0;
// 매개변수로 들어온 n까지 for문을 돌림
for (int i = 0; i < n; i++) {
answer++;
// 3의 배수거나 "3"을 포함하고 있으면
while (answer % 3 == 0 || String.valueOf(answer).contains("3")) {
answer++; // answer에 더해주고 리턴한다.
}
}
return answer;
}
}

class Solution {
public int solution(int[][] dots) {
// 점의 좌표를 변수에 저장
int x1 = dots[0][0];
int y1 = dots[0][1];
int x2 = dots[1][0];
int y2 = dots[1][1];
int x3 = dots[2][0];
int y3 = dots[2][1];
int x4 = dots[3][0];
int y4 = dots[3][1];
int answer = 0;
// 나올 수 있는 두 쌍의 조합을 계산한다.
double slope1 = (double) (y2 - y1) / (x2 - x1);
double slope2 = (double) (y4 - y3) / (x4 - x3);
if (slope1 == slope2) answer = 1;
slope1 = (double) (y3 - y1) / (x3 - x1);
slope2 = (double) (y2 - y4) / (x2 - x4);
if (slope1 == slope2) answer = 1;
slope1 = (double) (y4 - y1) / (x4 - x1);
slope2 = (double) (y2 - y3) / (x2 - x3);
if (slope1 == slope2) answer = 1;
return answer;
}
}
이 문제를 푸는데는 오래 걸렸고 이차원 배열이 어렵고 그렇게 좋은 코드도 아닌것같다..

class Solution {
public int solution(int[][] lines) {
// -100부터 100까지의 범위를 커버하기 위해 201 크기의 배열 사용
int[] arr = new int[201];
for (int i = 0; i < lines.length; i++) {
for (int j = i + 1; j < lines.length; j++) {
int start1 = lines[i][0];
int end1 = lines[i][1];
int start2 = lines[j][0];
int end2 = lines[j][1];
// 겹치는 부분을 찾기 위한 시작과 끝 계산
int overlapStart = Math.max(start1, start2);
int overlapEnd = Math.min(end1, end2);
// 겹치는 부분이 있는 경우 arr 배열에 표시
if (overlapStart < overlapEnd) {
for (int k = overlapStart; k < overlapEnd; k++) {
// 인덱스 보정: -100을 0으로 맞추기 위해 100을 더함
arr[k + 100] = 1;
}
}
}
}
// 겹치는 부분의 길이를 계산
int answer = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 1) {
answer++;
}
}
return answer;
}
}

import java.util.*;
class Solution {
public int solution(int a, int b) {
int finalB = b / GCD(a, b);
while(finalB != 1) {
if(finalB % 2 == 0) {
finalB /= 2;
}else if (finalB % 5 == 0) {
finalB /= 5;
}else {
return 2;
}
}
return 1;
}
// 유클리드 호제법 - 두 수의 최대 공약수 구하기
private int GCD(int a, int b) {
if (b == 0) {
return a;
} else {
return GCD(b, a % b);
}
}
}
이 문제는 유킬리드 호제법으로 최대공약수를 구해서 푸는 문제이다.