Find The Parity Outlier
주어지는 배열(크기는 3이상)에서 한개만 있는 홀수 또는 짝수를 찾는 문제
배열에서 처음 두개의 원소를 각각 2로 나눈 후 나머지를 a와 b에 저장한다.
a와 b를 비교하여 같을 경우 - 이후의 정수에서 나머지가 다른 하나를 찾으면 된다.
for문을 돌려 배열의 원소들을 그 다음부터 확인해 나간다.
다를 경우 - 처음 두개의 정수 중 답이 있다.
그 다음 원소의 나머지를 확인한다. a와 b중 그 나머지와 같지 않은 것을 찾으면 답을 찾을 수 있다.
제출한 코드
public class FindOutlier{
static int find(int[] integers){
int a = integers[0]%2;
int b = integers[1]%2;
if(a==b){
for(int i=2;i<integers.length;i++){
int c = integers[i]%2;
if(c!=a){
return integers[i];
}
}
}
else{
int c = integers[2]%2;
if(a==c){
return integers[1];
}
else{
return integers[0];
}
}
return 0;
}}
=>예시 문제는 통과했으나 attempt실패...!! 맞는것같은데 attempt로 제출하면 틀림ㅜ 왜그런지 모르겠음
190111--------------------------
지금까지 attempt가 틀린 이유를 생각해보면 그냥 문제에서 놓쳤거나 잘못 생각한 부분이 있다는 뜻이었다.
이 문제도 그냥 다 지우고 다시 생각해 보았다.
그래도 문제가 풀리지 않아 출력문을 이용해 어떤 부분이 값이 다른지 살펴봤다.
찾아보니 문제 푸는 방법에는 오류가 없었는데 integers[x]%2를 사용할 때 한 가지 간과한 부분이 있었다.
음수일 때 홀수와 양수일 때 홀수가 -1, 1로 다르기 때문이다. 이 부분을 고쳐 주면 문제가 풀릴 것 같다.
절댓값을 씌우는 방법은 Math.abs()를 사용하는 방법이 있어 그 방법을 사용하여 문제를 풀었더니 해결되었다.
public class FindOutlier{
static int find(int[] integers){
if(Math.abs(integers[0]%2) == Math.abs(integers[1]%2)){
for(int i=2 ; i<integers.length ; i++){
if(Math.abs(integers[i]%2)!=Math.abs(integers[0]%2)){
return integers[i];
}
}
}
else{
if(Math.abs(integers[2]%2) == Math.abs(integers[0]%2)){
return integers[1];
}
else{return integers[0];}
}
return 0;
}
}
=>해결
Find the missing letter
배열이 주어지고 안에 연속된 알파벳이 들어 있음이 중에서 빠진 것을 찾는 문제
알파벳마다 아스키 코드가 존재하므로 그것을 이용
알파벳 앞에 (int)를 붙이면 10진수 아스키 코드로 변환가능함
그렇게 for문을 돌려 순서대로 찾다가 다음 순서가 아닌 글자가 나온다 = 원래 나와야 할 글자를 출력
숫자 또한 다시 알파벳으로 변경 가능 (char)숫자 를 사용하면 됨
제출한 코드
public class Kata
{
public static char findMissingLetter(char[] array)
{
int nextNum = ((int)array[0]) + 1;
for(int i=1;i<array.length;i++){
if(nextNum!=(int)array[i]){
return (char)nextNum;
}
else{
++nextNum;
}
}
return ' ';
}
}
=>통과
Exes and Ohs
스트링이 주어지고, x와 o의 숫자가 같을 경우 true를 반환하는 문제
스트링.charAt(i)를 사용하면 i번째에 있는 원소를 가져올 수 있음
이를 통해 for문으로 스트링의 한 글자씩을 탐색함
boolean자료형의 result변수에 결과로 출력할 값을 저장.
초기화 상태는 true임. 아무것도 없을 경우도 x와 o의 숫자가 같다고 보니까.
190111------------------------
가장 간단한 방법은 그냥 x와 o의 개수를 세고 이 둘이 같지 않으면 false를 출력하는 방법이다. 딱히 다른 방법이 떠오르지 않아 이 방법으로 일단 풀고 다른 해답을 보기로 했다.
char문자를 비교할 때는 str.charAt(i) == 'o'와 같이 해야 한다는 것을 알았다.
public class XO {
public static boolean getXO (String str) {
int ONUM = 0;
int XNUM = 0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)=='o' || str.charAt(i)=='O'){ONUM++;}
else if(str.charAt(i)=='x' || str.charAt(i)=='X'){XNUM++;}
}
if(ONUM==XNUM){return true;}
return false;
}
}
=>통과
다른 해답을 찾아봤는데 str 을 전부 그냥 소문자로 바꿔버린 후,
o만을 replace함수로 없앤 길이와 x만을 없앤 길이가 같을 때 true를 리턴하는 방법이 있었다.
없앤 길이를 비교하는 것은 생각하지 못했던 방법이다. 그냥 x와 o를 셀 생각만 했었는데 이런 방법도 있구나 싶다.
'ACTIVITY > 모각코 (2018)' 카테고리의 다른 글
2-1 codewars (0) | 2019.01.08 |
---|---|
2-오늘의 목표 (190108) (0) | 2019.01.08 |
1-결과 (0) | 2019.01.03 |
1-2 leetcode (0) | 2019.01.03 |
1-오늘의 목표 (190103) (0) | 2019.01.03 |