친한 동료와 시작한 1일 1커밋 챌린지.. 어제 시작했는데 포스팅은 오늘함. 1일 1짱구 할거임!
Select | 1757. Recyclable and Low Fat Products
SELECT PRODUCT_ID
FROM PRODUCTS
WHERE LOW_FATS = 'Y' AND RECYCLABLE = 'Y'
Select | 584. Find Customer Referee
SELECT NAME
FROM CUSTOMER
WHERE REFEREE_ID IS NULL OR REFEREE_ID != 2
Basic Joins | 1378. Replace Employee ID With The Unique Identifier
SELECT UNIQUE_ID, NAME
FROM EMPLOYEES A
LEFT OUTER JOIN EmployeeUNI B
ON A.ID = B.ID
1213. [S/W 문제해결 기본] 3일차 - String (D3)
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14P0c6AAUCFAYi
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count;
for(int tc=0; tc<10; tc++) {
int n = sc.nextInt();
count = 0;
String s1 = sc.next();
String s2 = sc.next();
count = (s2.length()-s2.replace(s1, "").length())/s1.length();
System.out.printf("#%d %d\n", n, count);
}
}
이전에 문자열에서 특정 문자(또는 문자열) 카운팅 하는 방법으로 알아뒀던 로직 활용했다. 사실 replace() 함수 char 만 가능한줄 알고 문자열을 어떻게 찾지 했는데 문자열 찾기도 가능한듯..~
1215. [S/W 문제해결 기본] 3일차 - 회문1 (D3)
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi
static String[][] arr;
static int count;
static boolean flag;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for(int tc=0; tc<10; tc++) {
int n = sc.nextInt(); // 회문의 길이
arr = new String[8][8];
for(int i=0; i<8; i++) {
String[] input = sc.next().split("");
for(int j=0; j<8; j++) arr[i][j] = input[j];
}
count = 0;
int k;
for(int i=0; i<8; i++) {
for(int j=0; j<9-n; j++) {
int end=n+j-1; // 회문 길이 end
for(k=0; k<n/2; k++) {
if(!arr[i][j+k].equals(arr[i][end-k])) break;
}
if(k==n/2) count++;
}
}
for(int i=0; i<8; i++) {
for(int j=0; j<9-n; j++) {
int end=n+j-1; // 회문 길이 end
for(k=0; k<n/2; k++) {
if(!arr[j+k][i].equals(arr[end-k][i])) break;
}
if(k==n/2) count++;
}
}
System.out.printf("#%d %d\n", tc+1, count);
}
}
중요한 점은 회문의 길이가 정해져있음과 회문의 뜻, 거꾸로 읽어도 같은 단어임으로 양끝에서부터 비교해서 온다는 것
반복문을 이렇게 삼중으로 돌려도 되나 싶었는데 되더라
1216. [S/W 문제해결 기본] 3일차 - 회문2 (D3)
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14Rq5aABUCFAYi
위의 1215 문제와 비슷. 위의 문제는 회문 길이가 정해져있다면 이 문제는 회문을 찾아 (가장 긴) 회문의 길이를 구해야한다.
static String[][] arr;
static int len=0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for(int tc=0; tc<10; tc++) {
int tcn = sc.nextInt();
arr = new String[100][100];
len = 0;
for(int i=0; i<100; i++) {
String[] input = sc.next().split("");
for(int j=0; j<100; j++) arr[i][j]=input[j];
}
int end;
boolean flag=false;
int i, j, k, n;
// 가로 회문 체크
for(n=100; n>=1; n--) {
for(i=0; i<100-n; i++) {
for(j=0; j<100-n; j++) {
flag=false;
for(k=0; k<n/2; k++) {
if(j+k>=100 || j+n-k>=100) break;
if(!arr[i][j+k].equals(arr[i][j+n-k])) break;
}
if(k==n/2) {
len = Math.max(len, n);
}
}
}
}
// 세로 회문 체크
for(n=100; n>=1; n--) {
for(i=0; i<100-n+1; i++) {
for(j=0; j<100-n; j++) {
flag=false;
for(k=0; k<n/2; k++) {
if(j+k>=100 || j+n-k>=100) break;
if(!arr[j+k][i].equals(arr[j+n-k][i])) break;
}
if(k==n/2) {
len = Math.max(len, n);
}
}
}
}
System.out.printf("#%d %d\n", tcn, len);
}
}
알고리즘은 필요없는 단순 구현 문제이지만, 반복문이 많아 헷갈리지 않게 주의해야함
* 길이가 긴 회문을 구해야 함으로 회문 길이를 의미하는 변수인 n은 내림차순으로 내려올 것
[1일1커밋 3D] LeetCode SQL & 백준 JAVA 23971, 5073, 2292, 7562 (수학.. 그래프 순회) (2) | 2024.09.04 |
---|---|
[1일1커밋 2D] LeetCode SQL 50 & 백준 JAVA 1085 (0) | 2024.09.03 |
[SWEA] S/W 문제해결 기본 1일차 ~ 2일차 | JAVA (0) | 2024.08.25 |
[BAEKJOON] 유형별 문제풀이(1) | 그래프 DFS & BFS | JAVA (0) | 2024.08.25 |
[SWEA] JAVA | 다시 풀어볼 문제들 기록(1) (feat. 누적합 알고리즘) (0) | 2024.08.16 |
댓글 영역