
#isEitherEvenAndLessThan9
두 개 수를 입력받아 아래의 2가지 조건을 모두 만족하는지 검사합니다.
EitherEven: 적어도 하나의 수는 짝수이다.
LessThan9: 두 수 모두 9보다 작다.
중첩 if 문을 사용해야 하는데 처음 if문에 조건 다 넣을려다가 어떻게 넣을지 몰라서 고민한 문제.
public class Solution {
public boolean isEitherEvenAndLessThan9(int num1, int num2) {
// TODO:
if (num1 < 9 && num2 < 9) {
if (num1 % 2 == 0 || num2 % 2 == 0) {
return true;
} return false;
}
return false;
}
}
#isPythagorean
삼각형의 세 변을 입력받아 직각삼각형(pythagorean)인지 여부를 리턴해야 합니다.
직각삼각형은 가장 큰 변(빗변)의 제곱이 나머지 두 변 각각의 제곱의 합과 동일합니다. (피타고라스의 정리)를 이용!
자바에서 제곱은 Math.pow()
public class Solution {
public boolean isPythagorean(int side1, int side2, int side3) {
// TODO:
if (Math.pow(side1, 2) == Math.pow(side2, 2) + Math.pow(side3, 2) || Math.pow(side2, 2) == Math.pow(side1, 2) + Math.pow(side3, 2) || Math.pow(side3, 2) == Math.pow(side2, 2) + Math.pow(side1, 2)) {
return true;
}
else {
return false;
}
}
}
일단 side 1, side 2, side 3 중 가장 큰 변을 모르기 때문에 side 1의 제곱, side 2의 제곱, side 3의 제곱 3가지 조건을 or 로 묶어주었다.
- Reference Code레퍼런스 코드는 if문을 깔끔하게 작성하기 위해 pow 1, pow 2, pow 3를 int형으로 먼저 묶었다.
- public class Solution { public boolean isPythagorean(int side1, int side2, int side3) { int pow1 = side1 * side1; int pow2 = side2 * side2; int pow3 = (int) Math.pow(side3, 2); if (pow1 == pow2 + pow3 || pow2 == pow1 + pow3 || pow3 == pow1 + pow2) { return true; } return false; } }
#or
두 개의 boolean 값을 입력받아 or 연산을 적용한 것과 같은 결과를 리턴해야 합니다.
- || 연산자 사용은 금지됩니다.
- ! 와 && 연산자를 사용합니다.}
!는 not을 나타내는 연산자이기 때문에
!expression1 && !expression2 = expression1 | | expression2
와 같은 의미이다. - public class Solution { public boolean or(boolean expression1, boolean expression2) { // TODO: if (!expression1 && !expression2) { return false; } else { return true; } }
#convertScoreToGradeWithPlusAndMinus
점수를 입력받아 점수에 해당하는 등급을 리턴해야 합니다.
출력
- String 타입을 리턴해야 합니다.
- 각 등급의 최저 점수는 아래와 같습니다. ("F"의 경우 최대 점수를 표기)
90 이상 --> "A"
80 이상 --> "B"
70 이상 --> "C"
60 이상 --> "D"
60 미만 --> "F"
주의 사항
- 만약 주어진 점수가 100을 초과하거나 0 미만인 경우, 문자열 "INVALID SCORE"를 리턴해야 합니다.
- 각 등급의 최고 점수보다 7점 이하인 경우, 등급과 함께 "-"를 리턴해야 합니다. (단, 93점의 경우에는 A를 리턴해야 합니다.)
- 각 등급의 최저 점수보다 8점 이상인 경우, 등급과 함께 "+"를 리턴해야 합니다.
- F+ 와 F- 는 존재하지 않습니다.
일단 내가 작성한 코드
public class Solution {
public String convertScoreToGradeWithPlusAndMinus(int score) {
// TODO:
String grade;
if (score == 100) {
return "A+";
}
if (score > 100 || score < 0) {
return "INVALID SCORE";
} else if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else if (score >= 60) {
grade = "D";
} else {
grade = "F";
}
if (!grade.equals("F")){
if (score % 10 >= 0 && score % 10 <= 3) {
return grade + "-";
} else if (score % 10 >= 8 && score % 10 <= 9) {
return grade + "+";
} else {
return grade;
}
}
return grade;
}
}
첫번째 블럭은 if문으로 grade를 나눠주면 된다.
내가 고심했던 부분은
1. 각 등급의 최고 점수보다 7점 이하인 경우, 등급과 함께 "-"를 리턴,
각 등급의 최저 점수보다 8점 이상인 경우, 등급과 함께 "+"를 리턴.
-> 이 부분은 % 나머지 연산자로
if (score % 10 >= 0 && score % 10 <= 3) {
return grade + "-";
예를 들어 53이라는 숫자가 있으면 53 % 10 해주면 3이 나온다.
이런식으로 앞자리 날리고 뒷자리로만 최고 점수보다 7점 이하인 경우와 8점 이상인 경우를 나눠주면 된다.
- F+ 와 F- 는 존재하지 않는다는 조건은 최고점수와 비교해서 +와 -를 붙이는 과정에 F는 고려되지 않는다는 의미이다.
따라서 이 코드를 두번째 블럭 첫줄에 작성해주어야 한다. - if (!grade.equals("F")) { return grade; }
'알고리즘 > [알고리즘] 코플릿' 카테고리의 다른 글
| 변수 타입 문자열 (1) | 2022.09.23 |
|---|---|
| 반복문 (0) | 2022.09.23 |
| Collection (0) | 2022.09.23 |
| 재귀 (0) | 2022.09.23 |
| 자료구조 Stack Queue Graph Tree DFS/BFS (1) | 2022.09.23 |