문제 1. 로또의 최고순위와 최저 순위

해결방법

  • '0' 개수 세기
  • 전체 사이즈에서 0 개수 빼기
  • 2중 for문으로 맞은 개수 count하기
  • 최고순위와 최저순위 정해주기
    public int[] solution(int[] lottos, int[] win_nums) {
        // 0의 개수 count
        int zero=0;
        for (int i:lottos) {
            if (i==0) zero++;
        }

        int size=lottos.length-zero;
        
        int ans=0;
        for (int i=0;i<lottos.length;i++) {
            
            for (int j=0;j<win_nums.length;j++) {
                if (lottos[i]==win_nums[j]) {
                    ans++;
                    break;
                }
            }
        }
        // System.out.println("zero"+zero);
        // System.out.println("answer"+ans);
        
        int minValue=ans;
        
        int k=1;
        for (int i=6;i>=2;i--) {
            if (minValue==i) {
                break;
            }
            else {
                k++;
            }
        }
        
        int mins=k;
        int max=k-zero;
        // System.out.println(mins+" "+max);
        if (max==0) {
            max=1;
        }
        
        int[] answer = {max,mins};
        return answer;
    }

2. 신규 아이디 추천

이슈

  • 3단계에서 고민이 많았음, 3단계는 ..의 개수를 .1개로 줄여야 됨

  • 해결방법
    1 .의 인덱스 찾기 -> 다음값도 .이라면 하나의 .으로 변경 replace 사용
    String -> idx 접근 (CharAt(i))

       int lt=0;
        int rt=0;
        while (lt<id.length()) {
            if (id.charAt(lt)=='.') {
                rt=lt+1;
                String dot=".";
                while (rt<id.length()) {
                    if (id.charAt(rt)=='.') {
                        dot+=".";
                    }
                    else {
                        break;
                    }
                    rt++;
                }
                if (dot.length()>1) {
                    id=id.replace(dot,".");
                }
            }
            lt++;
        }
  1. 다른 사람의 3단계 해결방법
  • contains와 replace를 적절히 활용
        String step3 = step2.toString().replace("..", ".");
        while (step3.contains("..")) {
            step3 = step3.replace("..", ".");
        }
  • 사용한 JAVA 용법

    • substring : String 분할하기

    • str.charAt(i) : String의 인덱스 접근

    • replace : 매우 중요! 치환하기

      • replace가 변환할 값이 없어도 에러가 안나기 때문에 사용하자
    • replace vs replaceAll(정규식 가능)

      String test="aabbccddeefasdfabc";
      
      // replace 사용
      String result1=test.replace("abc","5");
      System.out.println(result1); //aabbccddeefasdf5
      
      // replaceAll 사용
      String result2=test.replaceAll("[a,b,c]","5"); // [a,b,c]는 정규식 표현 : 안에 들어간 모든 문자
      System.out.println(result2); //555555ddeef5sdf555
      
      // 만약 replace로 555555ddeef5sdf555로 나타내려면 너무 지저분함
      String result3=test.replace("a","5").replace("b","5").replace("c","5");
      System.out.println(result3); //555555ddeef5sdf555
      
      // replaceAll 정규식 표현 [^0-9]
      // 숫자가 아닌것은 전부 공백으로 바꿔라
      String test2="!@#$0022!#$$%asdfasdf1234";
      String result4=test2.replaceAll("[^0-9]","");
      System.out.println(result4); //00221234

전체 코드

	    public String solution(String new_id) {
        
        // String -> to Char Array
        char []temp=new_id.toCharArray();
        // System.out.println(Arrays.toString(temp));
        
        
        // 1단계 대문자 -> 소문자로 변경
        // 2단계
       
        String id="";
        for (int i=0;i<temp.length;i++) {
            // if (Character.isAlphabetic(temp[i]) && Character.isUpper(temp[i])) {
            //     id+=
            // }
            if (temp[i]=='-' || temp[i]=='.' || temp[i]=='_' || Character.isAlphabetic(temp[i]) || Character.isDigit(temp[i])) {
                char data=temp[i];
                if (Character.isAlphabetic(temp[i]) && Character.isUpperCase(temp[i])) {
                    data=Character.toLowerCase(temp[i]);
                }
                
                id+=data;
            }
        }
        // System.out.println(id);
        temp=id.toCharArray();
        // System.out.println(Arrays.toString(temp));
        // System.out.println("id:"+id);
        
        // 3단계
        // .의 인덱스 찾기 -> 다음값도 .이라면 하나의 .으로 변경 replace 사용
        // String -> idx 접근 (CharAt(i))      
        int lt=0;
        int rt=0;
        while (lt<id.length()) {
            if (id.charAt(lt)=='.') {
                rt=lt+1;
                String dot=".";
                while (rt<id.length()) {
                    if (id.charAt(rt)=='.') {
                        dot+=".";
                    }
                    else {
                        break;
                    }
                    rt++;
                }
                if (dot.length()>1) {
                    id=id.replace(dot,".");
                }
            }
            lt++;
        }
        
        // 3단계 다른 사람 풀이
        // id=id.replace("..",".");
        // while (id.contains("..")) {
        //     id=id.replace("..",".");
        // }
        
        
        // 4단계
        if (id.charAt(0)=='.') {
            id=id.substring(1);
        }
        int last=id.length()-1;
        // System.out.println("last"+last);
        if (last>0 && id.charAt(last)=='.') {
            // System.out.println("last"+last);
            id=id.substring(0,last);
        }
        
        
        // 5단계
        if (id.length()==0) {
            id+="a";
        }
        // System.out.println("new_id:"+id);
        
        // 6단계
        if (id.length()>=16) {
            id=id.substring(0,15);
        }
        // System.out.println("new_id:"+id);
        last=id.length()-1;
        // System.out.println("last"+last);
        if (last>0 && id.charAt(last)=='.') {
            // System.out.println("last"+last);
            id=id.substring(0,last);
        }
        
        // 7단계
        
        if (id.length()<=2) {
            char a=id.charAt(id.length()-1);
            // System.out.print("a:"+a);
            
            int size=id.length();
            String temps="";
            while (size<3) {
                temps+=a;
                size++;
            }
            // System.out.println("temps"+temps);
            id+=temps;
        }
        
        // System.out.println(id);
        return id;
    }

정규표현식으로 2,3단계 풀이

	String answer = new_id.toLowerCase(); // 1단계
        answer = answer.replaceAll("[^-_.a-z0-9]", ""); // 2단계
        answer = answer.replaceAll("[.]{2,}", "."); // 3단계

3. 숫자 문자열과 영단어

해결방법

  • replace !!! 매우 중요
  • 영단어가 들어가는 문자 배열과, 숫자가 들어가는 배열을 만들고 replace를 이용하여 변경해줌
    public int solution(String s) {

        
        String nums[]={"zero","one","two","three","four","five","six","seven","eight","nine"};
        String values[]={"0","1","2","3","4","5","6","7","8","9"};
        
        for (int i=0;i<nums.length;i++) {
            s=s.replace(nums[i],values[i]);
        }
       
        int answer = Integer.parseInt(s);
        System.out.println(answer);
        return answer;
    }

4. 없는 숫자 더하기

  • 중간에 빠진 숫자 구하기 (check 배열로 풀이)
  • 방법은 전체 체크 배열을 만들어 놓고 0~9까지의 배열
  • 주어진 숫자가 배열에 있으면 1로 체크
  • 체크 배열을 for돌면서 0인것은 없는 숫자
    public int solution(int[] numbers) {
       
        int answer=0;

        int arr[]=new int[10];
        
        for (int i=0;i<numbers.length;i++) {
            arr[numbers[i]]=1;
        }
        
        
        for (int i=0;i<=9;i++) {
            if (arr[i]==0)
            answer+=i;
        }
        

        return answer;
    }
profile
BackEnd Developer

0개의 댓글