[Java] 알고리즘 풀이 - 기초 문제

이해찬·2023년 6월 16일
0

항해일지

목록 보기
9/35

23.06.16 - D+16, 알고리즘 기초 문제

기록양식 (TIL)
1. 사용 개념
2. 의문점 or 문제
3. 시도해 본 것들(+응용) or 삽질
4. 해결
5. 알게 된 점(회고)

1. 개념

Java 2주차 강의 개념들 : 객체지향 전

2. 문제

내일부터는 오답 풀이과정도 적어 놓아야겠다.
총 12문제 풀이 / 그 중 5문제 반복 풀이

2-1.

📟시도

  • substring을 사용해서 index내의 글자를 추출
  • substring(시작번호,끝번호) >시작(0이 시작점)~끝 조회(6이라면 5까지 출력)
    ex) "ABCD" > substring(1,2) = "B"
  • length : 배열조회에서 사용(필드), 고정된 크기의 객체와 비슷 = 학생의 이름,키 등
  • length() : 문자열의 길이조회(메소드), 함수의 동적인 기능 = 문자열의 변수는 변동이 가능해서

💻 해결

class Solution {
    public String solution(String s) {
        String answer = "";
        
        if(s.length()%2==0){
            answer = s.substring(s.length()/2-1,s.length()/2+1);
        } else {
            answer = s.substring(s.length()/2,s.length()/2+1);
        }
        
        
        return answer;
    }
}

2-2.

📟시도

  • 제한사항의 모든 원소는 다르니, 중복을 하지 않는 배열의 set으로 시도
  • set 의 import와 생성
  • for each 사용 > 연속된 변수목록을 출력하기 위해 > numbers변수를 > 출력해서 > add로 추가
  • set!contains를 활용해서 겹치지 않는 부분들의 합을 출력

💻 해결

import java.util.HashSet;
import java.util.Set;
class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        
        Set<Integer> num = new HashSet<Integer>();
        
        for(int n : numbers){
            num.add(n);
        }
        
        for(int i=0; i<10; i++){
            if(!num.contains(i)){
                answer += i;
            }
        }
        
        return answer;
    }
}

2-3.

📟시도

  • 문제 내에서 signs[i] 참 여부에 따라 양수,음수를 설정 / if문 for문 활용
  • 조건문 내에서 배열의 출력 문법 형식, 아직 미숙
  • 불리언 배열의 참과 거짓을 따로 설정해주는 줄 착각

💻 해결

class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 0;
        
        for(int i=0; i<signs.length; i++){
            if(signs[i]==true){
                answer+= absolutes[i];
            } else {
                answer-= absolutes[i];
            }
        }
        
        
        return answer;
    }
}

2-4.

📟시도

  • 이전 문제에서 활용한 substring을 사용
  • 조건문 내에서 선언한 변수 는 바깥에서 미리 선언 해주어야함
  • substring(인덱스숫자,인덱스숫자) / substring(1) >첫 번째만 조회가 아니라, 1번째부터 끝까지
    실수 부분 s.substring(s.length(0),s.length()-4); > s.substring(0,s.length()-4);
  • 문자열의 길이는 length()

💻 해결

class Solution {
    public String solution(String phone_number) {
        String answer = "";
        String s = phone_number;
        String star = "";
        
        String last = s.substring(s.length()-4);
        String front = s.substring(0,s.length()-4);
        
        for(int i=0; i<front.length(); i++){
            star += "*" ;
        }
        
        answer = star + last ;
        return answer;
    }
}

2-5.

📟시도

  • 행렬의 개념에 대한 이해 부족
  • 2차 배열 생성
  • int[][] answer = new int[arr1.length][arr1.length]; >int[][] answer = new int[arr1.length][arr1[0].length]; > 문제의 동일 행,열을 보고 같은 length로 풀이
  • 각 행,열 length로 조절

💻 해결

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = new int[arr1.length][arr1[0].length];
        
        for(int i=0; i<arr1.length; i++){
            for(int j=0; j<arr1[0].length; j++){
                answer[i][j] = arr1[i][j] + arr2[i][j];
            }
        }
        
        return answer;
    }
}

5. 알게된 점(회고)

  • 간결하고 효율적인 코드작성을 위해서는 수학적 접근과 풀이방식이 필요하다.
    수학 공부를 시작해야겠다..
  • 머리로만 이해하는 것보단 역시 손으로 치고 몸으로 체득하는게 더 나한테 맞는 것 같다.

profile
디자인에서 개발자로

0개의 댓글