오늘 알고리즘 문제 풀이 주차에 들어서고 처음으로 알고리즘 문제를 풀어보게 되었습니다. 지금 자바를 시작하고 배운 문법은 제어문과 배열입니다. 이 두가지의 문법을 가지고 문제풀이를 시도해봤습니다.
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(*)로 바꿔야합니다.
System.out.println() 은 데이터를 출력한 후 자동으로 다음줄로 넘어갑니다. 즉 "개행문자(줄바꿈 문자)"가 붙습니다. 엔터키(Enter Key)가 자동으로 쳐지는 것입니다. 반면 System.out.print() 는 줄바꿈을 하지 않습니다. 대부분의 경우 println() 을 쓰고, 줄바꿈을 하지 말아야 하는 특수한 경우에만 print() 를 사용합니다.
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;
}
}
내가 쓴 코드에 비해 다른사람이 쓴 코드가 더 간단하고 가독성이 더 좋게 느껴집니다. 앞으로 알고리즘 문제를 풀때 접근방법에 대하여 더 넓은 시야를 가지고 문제를 해석하는 능력을 키워야할거같다고 생각했습니다. 또한, 아직 알고리즘 문제풀이에 있어 많이 부족하다고 느껴 적어도 매일 세문제 정도는 풀면서 알고리즘 문제푸는것에 익숙해져야겠습니다.