목표 : n개의 이진수 모두 XOR 연산해서 십진수로 출력
해결방법 : 처음 나오는 이진수로 배열을 돌며 하나씩 전체를 XOR한 결과를 출력했다.
public int solution(String[] arr) {
int answer = 0;
int compareBinaryNum = Integer.parseInt(arr[0], 2);
if(arr.length==1) return compareBinaryNum;
for(int i=1; i<arr.length; i++) {
int binaryNum = Integer.parseInt(arr[i], 2);
answer = (compareBinaryNum ^ binaryNum);
compareBinaryNum = answer;
}
return answer;
}
목표 : 양의 약수를 구하기
해결방법 : 자기 자신이 아닌 약수의 최댓값은 절반이니 절반까지 for문으로 약수를 구하고 자기 자신을 카운트해줬다.
public int solution(int n) {
int answer = 0;
for(int i=1; i<=n/2; i++) {
if(n%i==0) answer++;
}
answer++;
return answer;
}
목표 : 16진수를 2진수로 변환하기
해결방법 : 16진수를 10진수로 변환 후 2진수로 변환했다.
public String solution(String s) {
String answer = "";
int num = Integer.parseInt(s, 16);
answer = Integer.toBinaryString(num);
return answer;
}
목표 : 배열의 문자열들을 콤마(,)
로 이어서 하나의 문자열로 출력하기
해결방법 : 마지막은 콤마(,)
가 붙으면 안되서 마지막을 제외하고 뒤에 콤마(,)
를 붙여줬다.
public String solution(String[] arr) {
String answer = "";
for(String s : arr) {
answer += arr[arr.length-1]==s ? s : s+",";
}
return answer;
}
목표 : 패턴에 따라 낱말이 같으면 true 다르면 false를 반환하기
해결방법 : 처음엔 패턴의 입력 수와 낱말의 입력 수가 동일하다는 가정으로 문제를 풀었다. 제출을 하니 실패하는 케이스와 에러가 나오는 케이스가 있음을 알게되었다.
그래서 에러가 나는 것이면 패턴의 입력 수와 낱말의 입력 수가 다르다는 점을 생각할 수 있었고 if(p.length()<strs.length || p.length()>strs.length)
로 예외처리를 해주니 에러는 고쳐졌지만 실패하는 케이스가 남아있었다.
문제를 다시 한 번 꼼꼼히 읽어보니 왜 실패하는 지 알 수 있었다. 제한사항엔 적혀있지 않았지만 문제에 다른 패턴에 사용한 낱말을 다시 사용할 수 없습니다. 라는 말이 있었다. 그래서 패턴의 갯수와 낱말의 갯수가 다르다면 false를 리턴해주도록 수정하니 성공하였다.
public boolean solution(String p, String s) {
boolean answer = true;
Map<Character, String> map = new HashMap<>();
String[] strs = s.split(" ");
int wordCnt = new HashSet<>(List.of(strs)).size();
if(p.length()<strs.length || p.length()>strs.length) {
return false;
}
for (int i=0; i<p.length(); i++) {
char pattern = p.charAt(i);
String str = strs[i];
if(map.containsKey(pattern)) {
if(!map.get(pattern).equals(str)) {
answer = false;
break;
}
}
else map.put(pattern, str);
}
answer = map.size()==wordCnt ? answer : false;
return answer;
}