[TIL] - 알고리즘 문제 day1

장동희·2023년 2월 15일
0

TIL

목록 보기
3/16

알고리즘 문제 풀이

오늘 알고리즘 문제 풀이 주차에 들어서고 처음으로 알고리즘 문제를 풀어보게 되었습니다. 지금 자바를 시작하고 배운 문법은 제어문과 배열입니다. 이 두가지의 문법을 가지고 문제풀이를 시도해봤습니다.


알고리즘 문제 1 :

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();

        System.out.println(a + b);
    }
}

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
제한 조건 :n과 m은 각각 1000 이하인 자연수입니다.


접근 방법 :

우선 입력받은 값만큼 별(*)문자를 만들어내야하기때문에 반복문을 써야겠다는 생각을 했고 가로 세로이기때문에 입력받은 만큼 가로에 별이 찍히고 세로에도 찍어야해서 반복문을 중첩문으로 써야겠다고 생각하여 접근을 했습니다.

내가 쓴 코드 :

for(int i = 0; i < b; i++){
	for(int j = 0; j < a; j++){
    	System.out.println(*);	  		//오류
        } 
    }System.out.println();      

풀이 :

System.out.println(*); 이부분을 System.out.print(*)로 바꿔야합니다.

알게된것 :

print와 println의 차이

System.out.println() 은 데이터를 출력한 후 자동으로 다음줄로 넘어갑니다. 즉 "개행문자(줄바꿈 문자)"가 붙습니다. 엔터키(Enter Key)가 자동으로 쳐지는 것입니다. 반면 System.out.print() 는 줄바꿈을 하지 않습니다. 대부분의 경우 println() 을 쓰고, 줄바꿈을 하지 말아야 하는 특수한 경우에만 print() 를 사용합니다.


알고리즘 문제 2 :

class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        return answer;
    }
}

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

제한조건
1. a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
2.a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
3.a와 b의 대소관계는 정해져있지 않습니다


접근방법 :

우선 a가 b보다 작을때, a가 b보다 클때, a와b가 같을때를 구분하기 위해 if문을 써야겠다고 생각했습니다. 그리고 a와 b 사이의 값을 다 더해주기 위해 반복문을 사용하여 안에 값을 더해야겠다고생각했습니다.

내가 쓴 코드 :

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의 a부터 b의
                answer += i;				//값을 넣는다.
            }
        }else{								// b가 a보다 작을때도 똑같이 
            for(int i = b; i <= a; i++){	//b부터 a의값을 anser의 넣는다
                answer += i;
            }
        }
        return answer;
    }
}

다른 사람이 작성한 코드 :

class Solution {
  public long solution(int a, int b) {
      long answer = 0;
      for (int i = ((a < b) ? a : b); i <= ((a < b) ? b : a); i++) 
          answer += i;

      return answer;
  }
}

느낀점 :

내가 쓴 코드에 비해 다른사람이 쓴 코드가 더 간단하고 가독성이 더 좋게 느껴집니다. 앞으로 알고리즘 문제를 풀때 접근방법에 대하여 더 넓은 시야를 가지고 문제를 해석하는 능력을 키워야할거같다고 생각했습니다. 또한, 아직 알고리즘 문제풀이에 있어 많이 부족하다고 느껴 적어도 매일 세문제 정도는 풀면서 알고리즘 문제푸는것에 익숙해져야겠습니다.

0개의 댓글