💡 코테/99클럽

[ 99클럽 코테 스터디 8일차 TIL ] 하샤드 수 및 이상한 문자 만들기

MNY 2024. 4. 4. 23:15
728x90
반응형
💡 오늘의 학습 키워드

- 하샤드 수
- 이상한 문자 만들기

 

 

오늘의 회고

문제1  : [하샤드 수]

  • 어떤 문제가 있었고, 나는 어떤 시도를 했는지

입력받은 수에서 각 자리 수의 합이 입력받은 수로 나누었을 때 나뉘어지는지 여부를 리턴하는 문제이다.

입력받은 수는 1이상 10,000이하의 정수이다.

 

처음엔 입력받은 수의 일의 자리 수를 더하고 10으로 나눈 값을 다시 입력받은 수에 넣는 것을 반복해서 각 자리 수의 합을 구할 생각이었다. 그런데 입력받은 수로 해당 과정을 거치면서 0이 되어버려 마지막에 각 자리 수의 합과 나뉘어지는지 여부를 구할 수 없었다. 그래서 입력받은 수의 값을 복사해 줄 변수를 하나 만들어 해결했다.

 

 

프로그래머스

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

programmers.co.kr

 

  • 어떻게 해결했는지
// 입력 : 1이상 10,000이하 정수(x)
// 변수 : 입력값 복사(copy), 자리 수 길이(len), 각 자리 수 합(sum)

// 입력값 다른 변수에 복사해주기
// 자리 수 길이 구하기
    // 문자열로 변환 후 문자열의 길이 구하기
// 자리 수 길이 만큼 반복문 돌며 각 자리 수 합 구하기
    // sum += x % 10 각 자리 수 합에 일의 자리 수 더하기
    // x /= 10 일의 자리 수 버리기
// 입력값을 복사한 변수를 각 자리 수 합으로 나누었을 때 나머지가 생긴다면
    // answer에 false 값 넣기

// result : 각 자리 수의 합으로 나누어 떨어지는지 여부

class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        int copy = x;
        int len = Integer.toString(x).length();
        int sum = 0;
        
        for (int i = 0; i < len ; i++) {
            sum += x % 10;
            x /= 10;
        }
        
        if (copy % sum != 0)
            answer = false;
        
        return answer;
    }
}

 

문제2  : [이상한 문자 만들기]

  • 어떤 문제가 있었고, 나는 어떤 시도를 했는지

각 단어의 짝수는 대문자로, 홀수는 소문자로 바꾸어 리턴하는 문제였다.

단, 단어의 인덱스는 0부터 시작한다.

 

첨엔 배열로 바꿀까 생각했는데 단어의 인덱스를 가지고 있을 변수를 만들어주면 그럴 필요가 없을 것 같았다.

그래서 공백일 경우와 조건에 부합한 경우는 입력받은 문자열의 값을 그대로 넣었다.

짝수이면서 소문자일 경우는 대문자로 변환, 홀수이면서 대문자일 경우는 소문자로 변환했다.

그리고 공백일 경우 단어의 인덱스는 다시 0부터 시작되니 초기화해주었다.

이런 과정을 거치며 문자 하나를 더하기에 StringBuilder을 적용해주었다.

 

 

프로그래머스

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

programmers.co.kr

 

  • 어떻게 해결했는지
// 입력 : 1개 이상의 단어(s)
// 단어는 하나 이상의 공백으로 구분

// 변수 : StringBuilder, 문자열 길이(len), 각 단어 인덱스(idx)

// 문자열 길이 구하기
// 문자열 길이 만큼 반복문 돌며 대/소문자 변환
    // 공백일 경우, 
        // 각 단어 인덱스 초기화
        // 원래 문자 그대로 스트링빌더에 넣기
    // 단어 인덱스 짝수이며 소문자일 경우, 
        // 대문자로 변환 후 스트링빌더에 넣기
    // 단어 인덱스 홀수이며 대문자일 경우, 
        // 소문자로 변환 후 스트링빌더에 넣기
    // 그 외의 경우, -> (이미 조건에 부합한 경우)
        // 원래 문자 그대로 스트링빌더에 넣기
    // 대/소문자일 경우
        // 인덱스++;
// 리턴 문자열에 스트링빌더 값 넣기
    
// result : 문자의 짝/홀수 단어별로 대/소문자 변환한 문자열

class Solution {
    public String solution(String s) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        int len = s.length();
        int idx = 0;
        
        for (int i = 0; i < len; i++) {
            if (s.charAt(i) == ' '){
                idx = 0;
                sb.append(s.charAt(i));
            }
            else if (idx % 2 == 0 && s.charAt(i) >= 'a' && s.charAt(i) <= 'z')
                sb.append((char)(s.charAt(i) - 32));
            else if (idx % 2 != 0 && s.charAt(i) >= 'A' && s.charAt(i) <= 'Z')
                sb.append((char)(s.charAt(i) + 32));
            else
                sb.append(s.charAt(i));
            if ((s.charAt(i) >= 'a' && s.charAt(i) <= 'z') 
                || (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'))
                idx++;
        }
        answer = sb.toString();
        
        return answer;
    }
}

 

  • 무엇을 새롭게 알았는지

이상한 문자 만들기에서 문제를 다 풀이한 후 다른 사람들의 풀이를 보았을 때, 내가 풀이한 방식과 다른 방식이기에 신기했다. 그리고 배열로 바꾸는 것이 더 효율적이었을지에 대해 다시 한 번 생각했다. 하지만 그 둘에 대해서는 아직 어떤 방식이 더 효율적인지 모르겠다....

 

웹개발 용어를 정리하며 각 용어의 개념과 차이점에 대해 숙지할 수 있었다.

대략적인 내용만 정리해보았는데,  차이점과 장단점 그리고 어떤 방식으로 동작하는지에 대한 것 등 좀 더 자세하게 공부할 필요성을 느꼈다.

 

[스파르타코딩클럽] 데일리미션 - Lv.6 웹개발 용어 정리 3

·✅ 중학생도 알아들을 수 있게 쉽게 정리해보세요! 스레드(Thread, 쓰레드) : 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위 * 프로세스와 스레드의 차이점? 프로세스 : 운

moonnight0.tistory.com

 

내일 학습할 것은 무엇인지

  • 빅분기 자격증 모의고사 풀이
  • 백준 기본 문제 1개 풀이
  • 자바 형변환 정리
  • 클럽99 코딩테스트
728x90
반응형