어제 새벽에 이해했던 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 을 더하라는 의미이다.