알고리즘 문제풀이 - 1

정현욱·2022년 5월 17일
0

1.직사각형별찍기

https://programmers.co.kr/learn/courses/30/lessons/12969

예시

입력
5 3
출력
*****
*****
*****


import java.util.Scanner;

class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // 키보드 입력값받아오기
        int a = sc.nextInt();
        int b = sc.nextInt();
        for(int i=0; i<b; i++){ // 행만큼 돌리기
            for(int j =0; j<a; j++){ // 열만큼 돌리기
                System.out.print("*");//열만큼 돌려서 한줄에 별 찍고
            }System.out.println();//줄바꾸기
        }

    }
}

문제풀이

a=5,b=3 일때 3x5 모양의 별을 찍어야하니까
a=행(가로)가되고 b=열(세로) 가 된다
2중 for 문을 이용하여 풀었다.

2.짝수와 홀수

https://programmers.co.kr/learn/courses/30/lessons/12937

입출력 예

num return
3 "Odd"
4 "Even"

class Solution {
    public String solution(int num) {
        String answer = "";
        if(num%2==0){//짝수일때
            answer = "Even";
        }else{//홀수일때
            answer = "Odd";
        }
        return answer;
    }
}

문제풀이

num 을 2로 나눈 나머지가 0 == 짝수 , 아닐때 == 홀수

3.가운데 글자 가져오기

https://programmers.co.kr/learn/courses/30/lessons/12903

입출력 예
s return
"abcde" "c"
"qwer" "we"

class Solution {
    public String solution(String s) {
        String answer = "";
        for(int i =0; i<s.length(); i++){
            if(s.length() % 2==0){
                answer=s.substring((s.length()/2)-1 ,(s.length()/2)+1);
            }else {
                answer=s.substring((s.length()/2) ,(s.length()/2)+1);
            }
        }
        return answer;
    }
}

문제풀이

글자수가 짝수개일때는 가운데 2글자 , 홀수개일땐 가운데 1글자를 가져와야한다
1. 먼저 for문을 s의 길이만큼 돌려서 값을 가져오고
2. s의 길이를 2로 나눈 나머지가 0 == 짝수, 아닐때 == 홀수로 조건문을 생성
3. substring을 이용하여 내가 원하는 위치에 값을 가져올 수 있다
substrinf(x,y) x == 시작위치 , y == 끝나는위치

  • 예를들어 글자수가 짝수 "abcdef"가 있다고 가정하면 각각 인덱스는
    a = 0 , b=1, c=2, d=3, e=4, f=5 가 된다
    여기서 s의 전체길이 를 2로 나누면 6/2 = 3이 되니까 3은 d가된다. 여기서 우리는 c(2)와 d(3)을 가져와야 함으로 길이를 2로 나눈값에 -1부터 2로나눈값에 +1까지 가져오는 식을 만들어준다 여기서 포인트는 +1까지는 +1을 포함하지않는다 6/2+1 == 4여서 e까지 가져올것같지만 e는 포함되지않고 그전까지만 가져오는것 따라서 c(2)와 d(3)만 가져오게되는것
  • 글자수가 홀수 "abcde"일때는 위와 같이 계산하면 5/2는 2.5가 되지만 int 함수는 정수만 표현할수 있음으로 소숫점을 버리기때문에 2가되서 c값을 가져오고 우리는 c만 가져오고 싶기때문에 5/2부터 5/2+1까지 가져오는것이다

4.두 정수 사이의 합

https://programmers.co.kr/learn/courses/30/lessons/12912

입출력 예시
a b return
3 5 12
3 3 3
5 3 12

class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        if(a<b){ // a가 b보다 큰경우에
            for (int i=a; i<=b; i++){
                answer += i; // a가 b가 될때까지 1씩더하면서 값을 구해서 answer에 더해준다
            }
        }else if(a>b) { //b가 a보다 큰경우
            for (int i = b; i <=a; i++) { // b가 a가 될때까지 1씩더하면서 값을 구해서 answer에 더해준다
                answer += i;
            }
        } else if(a==b){ // 같은경우
            answer =a;  // a값을 answer에 대입해준다
        }
                
        return answer;

    }
}

문제풀이

경우의 수가 a > b , a < b, a=b 3가지 이므로 각각 조건문을 만들어서 풀었다
1. a=3, b=5 일 경우
for문에서 a 를 3으로 잡고 b가될때까지 돌려준다 == i값은 3, 4, 5가 되고 이걸 answer에 더해준다
2. b=5, a=3 일 경우
for문에서 b 를 3으로 잡고 a가될때까지 돌려준다 == i값은 3, 4, 5가 되고 이걸 answer에 더해준다
3. a=3, b=3 일경우
그냥 answer =a 해준다

5. 문자열을 정수로 바꾸기

https://programmers.co.kr/learn/courses/30/lessons/12925

입출력 예시

예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

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

문제풀이

문자열을 숫자로 변환하기

  • int형으로 변환할려면
Integer.parseint()
  • long형으로 변환 할려면
Long.parselong()

이런식으로 타입에 맞춰서 함수를 사용해주면된다

profile
코린이

0개의 댓글