자바 강의, 코테 문제
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
import java.util.ArrayList;
class Solution {
public int solution(int n) {
int answer = 0;
ArrayList <Integer> arr = new ArrayList<>();
while (n>0) {
arr.add(n%3);
n/=3;
}
for (int i=0; i<arr.size(); i++) {
answer+=arr.get(i)* Math.pow(3,arr.size()-1-i);
}
return answer;
}
}
3진법 : 세 개의 숫자(0,1,2)만 사용하는 수 체계
10진법-> 3진법 :
ex)
너무 형편없지만 위 사진과 같이 나머지를 역순으로 적으면 10진법을 3진법으로 바꿀 수 있음.
3진법-> 10진법
1200에서 앞에서 부터 1,2,0,0을 1X3의 3제곱, 2X3의 2제곱, 3X3의 1제곱, 3X3의 0제곱 이런 식으로 3X3의 자릿수 제곱을 해주면 됨.
문제 설명
한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사(3명을 더해서 0이 되는 것)을 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.
class Solution {
public int solution(int[] number) {
int answer = 0;
for (int i= 0; i<number.length-2; i++) {
for (int j=i+1; j<number.length-1; j++) {
for (int k=j+1; k<number.length; k++) {
if (number[i]+number[j]+number[k]==0) {
answer++;
}
}
}
}
return answer;
}
}
이중 for문은 써봤지 삼중은 생각도 못했다. 갈피를 못 잡아서 풀이를 보고 풀었다.
서로 같은 자리를 가리킬 수 있어서 중복이 안되게 시작 값을 준 부분이랑 for문의 중간 연산 부분에서 전체 길이에서 빼줘서 안쪽 for문은 끝났는데 바깥 쪽 for문이 계속 안 돌아가게끔 하는 부분이 인상 깊다.
인터페이스를 메서드의 리턴 타입으로 지정 가능
인터페이스의 장점:
1. 개발 시간 단축
2. 변경에 유리한 유연한 설계 가능
3. 표준화 가능
4. 서로 관계없는 클래스들을 관계를 맺어줄 수 있음
default 메서드 추가 설명: 인터페이스에 메서드를 추가 하고 싶은데 추가하게 되면 추상 메서드가 되어서 인터페이스와 관련 있는 클래스들이 영향을 받기 때문에 해결책으로 나온 것
default 메서드가 충돌할 때:
1. 여러 인터페이스의 디폴트 메서드 간의 충돌 : 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야 함.
2. 디폴트 메서드와 부모 클래스의 메서드 간의 충돌 : 부모 클래스의 메서드가 상속되고, 디폴트 메서드는 무시됨.
헷갈리면 그냥 직접 오버라이딩하면 해결
내부 클래스: 클래스 안의 클래스
내부 클래스의 장점:
1. 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 할 수 있음.
2. 코드의 복잡성을 줄일 수 있음(캡슐화).
내부 클래스의 종류:
인스턴스이너 클래스, 스태틱이너 클래스, 지역이너 클래스
인스턴스 변수(iv),스태틱 변수(cv),지역변수(lv) // 개념이 위 아래 같음.
자바 강의 객체 지향이 중요하다고 해서 이해 안 가면 최대한 이해할 때까지 보는데 인터페이스 이 부분은 이해하기 어렵다. 보고 또 봐야 이해할 수 있을 것 같다.