본문 바로가기

알고리즘/[알고리즘] 코플릿

조건문

#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점 이상인 경우를 나눠주면 된다.

  1. F+ 와 F- 는 존재하지 않는다는 조건은 최고점수와 비교해서 +와 -를 붙이는 과정에 F는 고려되지 않는다는 의미이다.
    따라서 이 코드를 두번째 블럭 첫줄에 작성해주어야 한다.
  2. 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