LoGin
article thumbnail
반응형




문제가 사진을 보는데 그 사진의 추억점수를 줘서 얼마나 가치 있는지 확인하는 설정의 문제였습니다.
 
배열들로 제공해주기때문에 단순하게 for문과 if문으로 이름과 점수를 매칭해서 배열로 반환해 주면 되는 문제입니다.
 
 
 
 

1. 문제링크

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 
 

2. 문제

 
 
 
 

3. 입출력 예시

 
 
 

4. 입출력 예시 설명

 
 
 

5. 풀이

문제 요약입니다.
사진의 점수를 매길것이다.
어떤 인물이 사진에 들어가 있는지에 따라 사진의 그리움 점수가 나뉜다.
사진들을 주면 사진들 순서대로 점수를 배열에 넣어 그리움 점수를 반환해 주면 된다.
 
해결방법 solution
1. 사진 개수만큼 for문을 돌린다.
2. 배열에 들어가는 이름을 점수로 바꾼다.
  2.1 이름을 매칭해 몇 번째인지 확인한다.
  2.2 순서를 yearning 배열에 매칭해서 점수를 가져와서 쌓는다.
  2.3 모든 사진 배열을 점수로 만든다.
3. 배열을 각자 sum을 사용한다.
4. 함 쳐진 점수들을 합쳐 배열을 만들어 반환한다.
 
 
 

6. 사진들의 점수가 들어갈 공간 만들기

<java />
       // 1차원 배열 지정  후  2차원 배열 크기에 맞게 적용 => 사진들의 점수가 들어갈 공간 만들기         int[][] answerTemp = new int[photo.length][];         for (int s = 0; s < photo.length; s++) {             answerTemp[s] = new int[photo[s].length]; // 각 행의 배열 길이 설정         }

 
 
 

7. 사진 개수만큼 반복문 돌리기

<java />
for(int i =0;i< photo.length;i++){             System.out.println("\n\n======="+i+"번째 사진 검사========"); }

 
 

8. 메인 코드 : 사진 이름과 점수를 매칭하고 없다면 0점 주기

<java />
   //사진에 이름들을 검사             for(int j = 0; j<photo[i].length;j++){                 String nameInPhoto = photo[i][j];                 //특정 이름의 순서 알아낸다음 , 점수 알아내기 => 이름 String type 숫자로 바꿔 배열에 넣기                 for(int k=0;k<name.length;k++){                     if(nameInPhoto.equals(name[k])){                         photo[i][j]=yearning[k]+"";                     }                 }                 // 숫자가 아니라면 "0"으로 바꾸기                 for(int ks=0;ks<name.length;ks++){                     if(photo[i][j].matches("[a-zA-Z]+")){                         photo[i][j]="0";                     }                 }             }

if문으로 정규식 조건을 줘서 매칭에 실패해 문자 그대로 남아있다면 0점을 주는 코드입니다.
 
 
마지막으로 그냥 반환해도 좋지만 이전에 만든 answer 배열에 넣었습니다.
 
배열로 노가다했지만 다음부터는 List 같은 컬렉션을 애용해서 사용하려 합니다....
 
 
 
 

9. 전체코드

<java />
package org.example; import java.util.Arrays; public class Main {     public static void main(String[] args) {         Solution solution = new Solution();         String [] name = new String[]{"may", "kein", "kain", "radi"};         int [] yearning = new int[]{5,10,1,3};         String [][] photo = new String[][]{{"may", "kein", "kain", "radi"},{"may", "kein", "brin", "deny"}, {"kon", "kain", "may", "coni"}};         int [] result = solution.solution(name,yearning,photo);         System.out.println(result); //result = [19,15,6]     } } /* 사진의 점수를 매길것이다. *   어떤 인물이 사진에 들어가 있는지에 따라 사진의 그리움 점수가 나뉜다. *   사진들을 주면 사진들 순서대로 점수를 배열에 넣어 그리움점수를 return 해주면 된다. * */ /* ex)))))) * name yearning photo result 순서대로 ["may", "kein", "kain", "radi"] [5, 10, 1, 3] [["may", "kein", "kain", "radi"],["may", "kein", "brin", "deny"], ["kon", "kain", "may", "coni"]] [19, 15, 6] * */ /* * 해결방법 solution *   1. 사진 갯수만큼 for문 돌린다. *   2. 배열에 들어가는 이름을 점수로 바꾼다. *       2.1 이름을 매칭해 몇번째인지 확인한다 *       2.2 순서를 yearning 배열에 매칭해서 점수를 가져와서 쌓는다.. *       2.3 모든 사진 배열을 점수로 만든다. *   3. 배열을 각자 sum을 사용한다. *   4. 합쳐진 점수들을 합쳐 배열을 만들어 반환한다. * */ class Solution {     public int[] solution(String[] name, int[] yearning, String[][] photo) {         int[] answer = new int[photo.length]; // 사진 갯수         // 1차원 배열 지정  후  2차원 배열 크기에 맞게 적용 => 사진들의 점수가 들어갈 공간 만들기         int[][] answerTemp = new int[photo.length][];         for (int s = 0; s < photo.length; s++) {             answerTemp[s] = new int[photo[s].length]; // 각 행의 배열 길이 설정         }         //사진 갯수만큼 for문 돌린다.         for(int i =0;i< photo.length;i++){             System.out.println("\n\n======="+i+"번째 사진 검사========");             //사진에 이름들을 검사             for(int j = 0; j<photo[i].length;j++){                 String nameInPhoto = photo[i][j];                 //특정 이름의 순서 알아낸다음 , 점수 알아내기 => 이름 String type 숫자로 바꿔 배열에 넣기                 for(int k=0;k<name.length;k++){                     if(nameInPhoto.equals(name[k])){                         photo[i][j]=yearning[k]+"";                     }                 }                 // 숫자가 아니라면 "0"으로 바꾸기                 for(int ks=0;ks<name.length;ks++){                     if(photo[i][j].matches("[a-zA-Z]+")){                         photo[i][j]="0";                     }                 }             }             //콘솔 확인 ///////////////// int로 바꾸기             System.out.println(i+"번째 사진 점수는");             for (int h = 0;h< photo[i].length;h++){                 System.out.println(photo[i][h]);                 answerTemp[i][h]= Integer.parseInt(photo[i][h]);             }             //점수 합치기             answer[i] = Arrays.stream(answerTemp[i]).sum();         }         return answer;     } }

 

728x90
반응형
profile

LoGin

@LoGinShin

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!