TIL - 항해 99 8일차

스브코·2021년 11월 8일

항해99 2주차 알고리즘 연습의 첫째날입니다.

달리기반과 걷기반으로 나뉘어 프로그래머스 문제를 풀었습니다.

달리기반 - 1주 동안 총 40 문제 필수 + 14문제의 challenge 문제

걷기반 - 1주 동안 촌 28 문제 필수 + 26문제의 challenge 문제

프로그래머스 문제를 거의 100문제 이상 풀었기 때문에 정해준 문제를 확인해보니

키패드 누르기와 다트게임을 제외하고는 전부 푼 문제....

열심히 블로그에 풀이법을 작성하고 다른분들이 푼 방식과 비교도 하면서 학습을 마쳤다...

내일은 두 문제 마저 풀고 다른 문제를 더 풀어봐야할 것 같다.

함께 문제 풀이를 한 조원들의 블로그

김용빈 (https://dazbee.tistory.com/10)

서유리 (https://yuricoding.tistory.com/)

김우진 (https://blog.naver.com/woojin126)

스터디를 함께하며 새로 알게된 부분

  1. 자바 변수 앞에 -를 해도 된다.

    int answer = 1;

    return -answer;

    이게 된다... ㅋㅋㅋ 몰랐다.

  1. 프로그래머스 플랫폼에 리턴 타입을 수정해도 통과가 된다 ㅋㅋㅋㅋ 대박

예를 들어 리턴 타입이 정수 배열인데,

public int [] solution(int[] numbers, String hand) {

HashSet으로 바꿔서 리턴해도 통과가 됨 ㅋㅋㅋ

public HashSet solution(int[] numbers, String hand) {

찾으신 팀원분 천재신듯 ... ㅋㅋ

다른사람의 풀이 중 내 풀이와 다른 접근법

문자열을 정수로 바꾸기

내 풀이

class Solution {
    public int solution(String s) {
        int answer = 0;
        boolean minus = false;
        
        if(s.charAt(0) == '-')
            minus = true;
        
        int tenth = 1;
        int minusNum = 0;
        
        if(minus || s.charAt(0) == '+')
            minusNum = 1;
        
        for(int i = s.length() - 1; i >= minusNum; i--) {
            answer += (s.charAt(i) - 48) * tenth;
            tenth *= 10;
        }
        if(minus)
            answer = 0 - answer;
        
        return answer;
    }
}

용빈님 풀이

class Solution {
    public int solution(String s) {
        int answer = Integer.parseInt(s);
        
        return answer;
    }
}

ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 쉬운길을 생각 못한 내가 바보

문자열 다루기 기본

내 풀이

class Solution {
    public boolean solution(String s) {
        if(s.length() == 4 || s.length() == 6) {
            for(int i = 0; i < s.length(); i++) {
                if(s.charAt(i) < 48 || s.charAt(i) > 57)
                    return false;
            }
            return true;
        } else {
            return false;
        }
    }
}

용빈님 풀이

class Solution {
    public boolean d(String s){
        boolean result = false;
        
        if(s.length() == 4 || s.length() == 6){
               try{
                   int test = Integer.parseInt(s);
                   result = true;
               }catch(NumberFormatException e){
                   
               }
        }
        
        return result;
    }
    
    public boolean solution(String s) {
        boolean answer = d(s);
        
        return answer;
    }
}

다른 접근법.. 신선했다.

하샤드 수

내 풀이

class Solution {
    public boolean solution(int x) {
        int sum = 0;
        StringBuilder sb = new StringBuilder();
        sb.append(x);
        String conversion = sb.toString();
        for(int i = 0; i < sb.toString().length();i++)
            sum += (int) conversion.charAt(i) - 48;
        return x % sum == 0 ? true : false;
    }
}

우진님 풀이

class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        int input = x;
        int sum = 0;
        
        while(input !=0){ //각 일의자리 십의자리 백의자리 를 구하는로직
            sum += input % 10;
            input /= 10;
        }
        
        if(x % sum !=0) //각자리수를 더한값과 입력한값을 나눈나머지에대한 판별
            answer = false;
        
        return answer;
    }
}

저는 스트링 형태로 바꾸었는데 우진님은 바로 연산으로 푸셨네요.

회고

비교적 쉬운 문제들이긴 했지만 팀원들과 함께해서 좀 더 재밌고 효율있게 학습한 것 같다. 정말 쉬운 문제들이라 역시 거의 풀이가 비슷했지만 위와 같이 가끔 다른 풀이법을 보면 도움이 되기도 하고 문제를 다르게 보는 시야도 생기는것 같다. 내일은 좀더 난이도 있는 문제들을 고민해보며 다같이 실력을 늘려 가봐야겠다.

profile
익히는 속도가 까먹는 속도를 추월하는 그날까지...

0개의 댓글