본문 바로가기

항해99

23.08.18 항해 99 16기 프로그래밍 기초2 1일차

오늘 공부한것

* 알고리즘 문제풀이

* 3주차 강의 복습

 

오늘은 새로운 주차의 시작이었다

팀원도 바뀌었다

두분은 비슷한 학과를 재학중이셨고

한분은 1년정도 개인적으로 공부하셨다고한다

이번에도 아무것도 모르고 항해를 시작한건 나혼자였다

많은 도움을 받아야겠다고 생각하면서 알고리즘 풀이가 시작되었다

 

알고리즘 문제풀이는 2명씩 한조가되어

서로 번갈아가면서 

네비게이터와 드라이버의 역활을 하며 진행되었다

하지만 나는 팀원에 비해 진도가 늦는 터라 어떻게 접근해야하는지

알려주셔서 그걸 토대로 문제 풀어보고 궁금한거 물어보고 검사받는 식으로 진행하였다

 

문제1 짝수와 홀수
문제 설명
정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
class Solution {
    // input
    // int num
    //
    // 계산
    // num%2==0 짝
    // num%2==1 홀
    //
    // output
    // 짝수면 Even
    // 홀수면 Odd
    public String solution(int num) {
        String answer = "";
        if (num%2==0){
            answer="Even";
        } else{
            answer="Odd";
        }
        return answer;
    }
}

 

문제2 평균 구하기
문제 설명
정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.
class Solution {
    // input 
    // 배열arr
    //
    // 계산
    // 1+2+3 / 3 = 평균값
    //
    // output
    // arr의 평균값
    public double solution(int[] arr) {
        double sum=0;
        double answer = 0;
        for (int i=0; i
            sum += arr[i];
        }
        answer = sum/arr.length;
        return answer;
    }
}

 

문제3에서 어려웠던 부분은

숫자->문자열, 문자열-> 숫자로 변경하는 부분 이었다

자연수 N을 N의 자릿수로 바꾸기 위해서 숫자->문자열로 변경하고

문자열로 변경된 것의 합을 return하기 위해서 문자열->숫자로 변경이 필요했다

문제3 자릿수 더하기
문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
import java.util.*;

public class Solution {
    // input
    // 자연수 n
    //
    // 계산
    // 자연수 n 은 문자열
    // 숫자->문자열 Integer.toString()
    // 문자열->숫자로 변환 Integer.parseInt()
    // 후 sum
    //
    // output
    // n의 각 자릿수의 합
    public int solution(int n) {
        int answer=0;
        String transStr=Integer.toString(n);
        for (int i=0; i<transStr.length();i++){
            answer += Integer.parseInt(transStr.substring(i, i+1));
        }
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println(answer);

        return answer;
    }
}
문제4 약수의 합
문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
class Solution {
    // 약수 = 어떤수를 나누어 떨어지게 하는 수
    
    // input
    // 
    // 계산
    // int i=0; i<=n; i++
    // 정수n%i ==0
    // 
    //output
    // return answer
    public int solution(int n) {
        int answer = 0;
        for(int i=1; i<=n; i++){
            if(n%i==0){
                answer += i;
            }
        }
        return answer;
    }
}


문제5에서 문제가 되었던건 break;를 하지 않았던 것이었다

break;를 하지 않았더니 중복되는 숫자가 발생했던 것이다 

가장 작은 자연수를 return 해야는데 중복값이 나와서 통과가 되지 않았다

문제5 나머지가 1이 되는 수 찾기
문제 설명
자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.
class Solution {
    // input
    // n
    // 
    // 계산법
    // int n 매개변수
    // n%x==1 가장 작은 자연수 x 
    //
    //output
    // return answer
    public int solution(int n) {
        int answer = 0;
        for (int i=1; i<=n; i++){
            if(n%i==1){
                answer = i;
                break;
            }
        }        
        return answer;
    }
}

 

문제6번에서는 계산방법의 표현이 문제였다

x=2 이고 n=5일때 [2, 4, 6, 8, 10]이 나와야 하는데

이것이 수학적으로 어떻게 표시되는지를 몰랐다... 

그래서 손으로 종이에 써가면서 관련 수식을 찾았다

또한 제한 조건에 x는 10000000 이상, 10000000 이하인 정수 라는 이야기가 있었는데

int는 이 범위에 해당하지 않아 long으로 변형하는 것이 필요했다

문제6 x만큼 간격이 있는 n개의 숫자
문제 설명
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
class Solution {
    // input 
    // int x 정수
    // int n 자연수
    //
    // 계산방법
    // x=2 2씩 증가하는 [2, 4, 6, 8, 10] n=5
    //
    //output 
    // x부터 x식 증가하는 숫자를 n개 지니는 list
    
    public long[] solution(int x, int n) {
        
        long[] answer = new long[n];
        for(int i=0; i<answer.length; i++){  
            answer[i] = (i+1)*(long)x;               //X x 2
    
        }
        return answer;
    }
}