2024_09_11 Kata

SJ.CHO·2024년 9월 11일

알고리즘 Kata

66.

  • 답안 :
package answer;

public class Solution {
	public int[] solution(String[] keymap, String[] targets) {
		int[] answer = new int[targets.length];
		int acnt = 0;
		// 타겟데이터 추출
		for (int i = 0; i < targets.length; i++) {
			char s[] = targets[i].toCharArray();
			// 데이터 문자만큼반복
			for (char c : s) {
				int minidex = Integer.MAX_VALUE;
				// 타겟 문자당 keymap의 위치를 찾아 반환
				for (int j = 0; j < keymap.length; j++) {
					acnt = keymap[j].indexOf(c);
					// 문자가 존재하고 최소값일때 최소값변경
					if (acnt > -1 && minidex > acnt) {
						minidex = acnt;
					}
				}
				// 문자가 있을경우 저장 없을경우 -1
				if (minidex < Integer.MAX_VALUE && answer[i] != -1) {
					answer[i] += minidex + 1;
				} else {
					answer[i] = -1;
				}
			}
		}
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Solution s = new Solution();
		String[] keymap = { "ABACD", "BCEFD" };
		String[] targets = { "ABCD", "AABB" };
		System.out.println(s.solution(keymap, targets));
	}
}
  • 알고리즘 설명 : targets[] 에 있는 문자열을 하나씩 꺼내서 문자열의 문자를 1개씩 추출 후 keymap[] 배열에 있는 요소의 String.indexof() 메소드를 이용하여 해당 인덱스값을 알아낸후 최소값을 구하여 answer 배열에 항목에 더해주는 방식.
  • 처음에선 keymap의 요소도 하나씩꺼내어 비교하려하였으나 반복문 조건성립과 코드가독성떄문에 폐기.

SQL Kata

70.

  • 답안 :
select m1.MEMBER_NAME, r1.REVIEW_TEXT, date_format(r1.REVIEW_DATE,'%Y-%m-%d') as 'REVIEW_DATE'
from REST_REVIEW r1
inner join MEMBER_PROFILE m1
on r1.MEMBER_ID = m1.MEMBER_ID
where r1.MEMBER_ID in 
(select MEMBER_ID
from 
(select MEMBER_ID, count(MEMBER_ID) as 'MAX' 
from REST_REVIEW 
group by 1
order by 2 desc
limit 1) as a)
order by REVIEW_DATE,REVIEW_TEXT
  • 천천히 조건을 하나씩 서브쿼리로 묶어가면서 풀었음.
  • 첫 서브쿼리를 통해 리뷰수가 최다인 사람의 이메일을 추출 이후 join을 통해 해당 멤버 이메일의 대한 정보를 가져와 출력.
  • 동일등수의 인물을 전부 가져오지않아도 정답이라 문제가 좀 이상함.
profile
70살까지 개발하고싶은 개발자

0개의 댓글