목록[코딩테스트] (68)
요르딩딩
해당 값을 갯수로 나눈 후 뒤에서 부터 하나씩 +1을 헤준다. import java.util.*; class Solution { public int[] solution(int n, int s) { int[] answer = new int[n]; int value = s/n; // 몫 int mod = s%n; // 나머지 구하기 if (value == 0) { // 없는경우 answer = new int[1]; answer[0] = -1; return answer; } for(int i=0; i < n; i ++) { answer[i] = value; } int index = n-1; for(int i=0; i
이번문제도 풀어서 구현하는거는 어렵지 않았다. 다만, 예외사항들이 존재해 중간중간 디버깅하면서 처리해 주는것도 어렵지 않았다. 여기서 나는 크게 두가지 구현을 생각했다. 1. 진수변환 2. 소수찾기 진수변환은 계속 나누어 나머지를 역순으로 적용하는 방법을 사용. 소수찾기는 소수란 1과 자기자신으로만 나눠지기에 둘을 제외한 나머지 값으로 나누었을때 안나눠지면 소수로 판단 이렇게 구현을 하고 나니 2가지 케이스에서 이슈가 발생했다. 1번째는 런타임 이슈, 2번째는 느낌상 0 값을 넣었을때였다. 2번째는 역시 0을 넣었을때 1이 나와, 0이 나오도록 예외처리를 해주었다. 여기서 핵심은 1번 이슈인거 같은데, 소수를 구할때 1~자기자신까지 모두 나눌 필요 없이 제곱근까지만 나눠보면 판단 할 수 있다는 점이다. ..
이번문제는 예외사항을 제외하면 구현하기에는 어렵지않은 문제이다. 여기서 주의해야 할 점에 대해서 알아보자. 1. 영문자만 가능 : 정규식 사용 2. 대소문자 구분 없음 : 모두 대문자로 치환하여 사용 3. 두 집합이 모두 공백일 경우 : 65536 바로 반환 4. list에서 contains() 사용하여 비교가능 5. list 깊은 복사는 .addAll() 사용 6. 교집합 개수 구할때 비교하는 집합에서 제거해가며 카운트해야 올바른 개수를 구할 수 있다. 7. 나누기 소수점 이슈 double사용 8. 소수점 버리기 이슈 int형으로 반환 import java.util.*; class Solution { public int solution(String str1, String str2) { int answe..
이번문제도 역시 레벨2 치고는 상당히 쉬운? 문제라고 생각한다. 다만, 여기서 실행시간 오류로 인해 스택을 써야하는 이슈가 있었다는 점을 생각하면, 어려운? 문제라고 생각 될 수도 있다. 처음에 문제를 풀때는 스택대신 ArrayList에 넣어 순서대로 비교하도록 구현였다. 역시 효율성 문제에서 이슈가 생겨 stack 활용하여 다시 구현하였다. 굳이 equals를 쓰기위해 String으로 변환하는 비효율적인 코드이지만, 나중에는 그냥 char로 두고 ==으로 비교하도록 해야겠다. 한번만 더 꼼꼼히 생각하자!!! 정답만 맞는다고 좋은 코드는 아니다!!! import java.util.*; class Solution { public int solution(String s) { int answer = -1; c..
이번문제는 중복문제만 해결하면 쉬운문제이다. 나는 ArrayList를 사용하여 중복체크를 해주었지만, 보다 간편하게 로직을 구현하려면 Set에 모두 담기만하면 된다. Set에는 중복된 값이 들어가지 않기 때문이다. 보다 간편한 방법을 사용하도록 항상 고민하자 !!! import java.util.ArrayList; class Solution { public int solution(int[] nums) { int answer = 0; ArrayList arr = new ArrayList(); int maxSize = nums.length/2; for(int i=0; i < nums.length; i++) { int n = nums[i]; if(!arr.contains(n)) { arr.add(n); } i..
이번문제는 딱 문제를 읽었을때는 무슨소리야~~ 하면서 기분이 좋지 않았다ㅋㅋㅋㅋㅋ 그러나 이해하고 아래의 구현순서을 확인하니 감이 생겼고, 간단한 손코딩 후 바로 구현하기 시작했다. 구현순서가 자세히 나와있어, 구현하는데는 그다지 어렵지 않았던거 같다. 이 문제는 문제 이해가 핵심이다. 여기서 주요하게 생각하는 포인트를 알아보자. 1. String문자열은 CharAt을 이용하여 배열형태로 사용할 수 있다. (문자열.toCharArray()를 사용하면 바로 변환된다.) 2. 재귀를 사용한다. 재귀가 구현할때 고려해야할 부분들이 많아 어렵게 느껴지겠지만, 이 문제는 시키는대로만 구현하면 된다. 3. 추가로 괄호의 갯수 파악하기, 괄호 반대로 적용하기 등등 조금만 생각하면 쉽게 구현할 수 있다. class S..
이번문제는 비교적 쉬운 문제였다. 다만 런타임에러가 발생하여, 몇가지 문제점들을 확인 후 완료할 수 있었다. 처음에는 리스트를 사용하여 매번 정렬을 하였다가 우선순위 큐를 사용하도록 수정했다. 그리고 while문의 종료조건만 잘 작성한다면 보다 쉽게 해결할 수 있는 문제이다. import java.util.*; class Solution { public int solution(int[] scoville, int K) { int answer = 0; Queue q = new PriorityQueue(); for(int i =0; i < scoville.length; i++) { q.add(scoville[i]); } int first = -1; //무조건 1번 시작 int count = 0; while (..
이번문제는 난이도가 1인 문제라 쉬운 문제였다. 다만 다 풀고난 후 다른사람들의 풀이를 보니 효과적으로 푸신 분들이 많아 정리하려고 한다. 내가 푼 방식의 포인트를 정리해보자. 1. 각 배열을 2진수로 표현하기 2. 모두 공백인 경우만 공백으로 간주하기 이렇게 두가지 포인트를 나는 직접 구현했지만, 몇몇 함수를 적용하면 효율적이면서 간단하게 구현할 수 있었다. 1. result[i] = Integer.toBinaryString(arr1[i] | arr2[i]); 이진수로 변환하여, 비트연산을 이용해 계산한다. 역시 문제를 다 풀었더라도 나보다 잘 푸신분들의 풀이를 참고하면, 배울점이 많이 있는것 같다. 앞으로도 쉬운문제일지라도 곱씹어 보는 시간을 가져보자 [내가 구현한 코드] class Solution ..