pwoogi
자신의 왜곡된 경험을 진실이라고 생각하지 말자

Algorithm/프로그래머스 LV.0.5~LV.1 (Day 2)

[JAVA] 알고리즘 입문 LV.0.5~LV 1

pwoogi 2022. 7. 16. 11:06
어제 새벽에 이해했던 LV. 0단계를 조금 정리하면서 학습해보자

 

반복문, 조건문, 문자열, 연산자의 알고리즘 풀이 연습을 기본적으로 알아야 나중에 더 큰 알고리즘이나 자료구조를 이해할 수 있을 것 같다. 우선 많은 풀이와 반복학습을 통해 이해해보자

 

1.  핸드폰 번호 가리기

 

문제 : 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

 

조건 : 

  • phone_number는 길이 4 이상, 20이하인 문자열입니다.

해결 : 

class Solution {
    public String solution(String phone_number) {
        String answer = "";
      for(int i = 0; i < phone_number.length(); i++){
         if(i < phone_number.length()-4){
             answer += "*";
         }
         else{
             answer += phone_number.charAt(i);
         }
      }
      return answer;
  }
}

해석 : 

1. phone_number 매개변수로 번호를 받아서 길이만큼 돌려준다.

2. 단 변수 i 끝에 4번째 자리수 전까지는 ' * ' 을 찍어서 가려준다

3. 그게 아니라면 charAt으로 phone_number의 index를 꺼내어 answer에 저장하고 결과를 반환한다.

계속해서 문자열 알고리즘을 이해하도록 해보자

 


2. 행렬의 덧셈

 

문제 : 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

 

조건 :

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

해결 : 

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

 

해석 : 

 

1. 다차원 배열의 요소를 모두 합하는 반복문은 아예 외워두자

// .....위 생략
	int[][] score = {
            {100, 200, 300},
            {10, 20, 30},
            {40, 40, 40}
        };

    int sum = 0;
 	for(int i = 0; i < score.length; i++){
            for(int j = 0; j < score[i].length; j++){
                sum += score[i][j];
            }
        }
//......아래 생략

2. 위의 예시 for문을 보면 score.length 와 score[i].length가 있는 것을 확인할 수있다. 이 때 score.length는 행의 길이( 3 )를 의미하고 score[ i ].length는 열의 길이를 의미한다 이해하면 좋다. 아래의 이미지를 통해 개념을 정리해보자.

출처 : 남궁성 강사님 - 자바의 정석

3. 이제 이중 반복문을 잘 이해했는지 검토해보자

for(int i = 0; i < arr1.length; i++){
            for(int j = 0; j < arr2[0].length; j++){
                arr1[i][j] += arr2[i][j];

이 경우 for문을 이용하여 arr1 배열을 행으로 돌리고 arr2를 열로 돌릴건데 arr2[0] 요소 즉 열의 [0]번째 요소들만 돌려서 담으라는 뜻이다. 위의 그림을 예시로 100+20+30+40+50 을 더하라는 의미이다.