알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://level.goorm.io/exam/43113/substring/quiz/1

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이

level.goorm.io


Think🤔

이번에도 Scanner와 함께 같이 이용해서 풀어본다.

일단 처음 input으로 I Love You를 받는다.

그리고 3 4를 하면 

3번째에 있는 Love부터 4글자 출력되면 되는 문제이다.

 

import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		String[] range = br.readLine().split(" ");
		System.out.println(range[0]+ " " + range[1]);
		
		String answer = input.subString(range[0], range[1]);
		
		System.out.print(answer);
	}
}

input.subString 부분에서 에러가 난다.

첫 번째 파라미터로 begin을 받고 두 번쨰 파라미터로 end를 받는데 도대체 어느 부분이 문제인 것인가 ....

 

 


Solution✍
import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		String[] range = br.readLine().split(" ");
		
		String answer = input.substring(Integer.parseInt(range[0])-1, Integer.parseInt(range[0])+Integer.parseInt(range[1])-1);
		
		System.out.print(answer);
        	br.close();
	}
}

0,1,2 이렇게 읽고 range의 값은 -1 부터 시작해야 된다.

그리고 뒤에 값은 그 범위 부터 + 두번째 입력된 값 부터 시작해야 한다.

 

이걸 Scanner로 바꿔서 풀어보자

 

import java.io.*;
import java.util.Scanner;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String munjang = sc.nextLine();
		int a = sc.nextInt();
		int b = sc.nextInt();
		
		String answer = munjang.substring(a-1,a+b-1);
		
		System.out.print(answer);
        	sc.close();
	}
}

Scanner를 이용하면 띄어쓰기를 해도 값을 인식한다.

뒤에 있는 값은 누적해서 -1을 뺀 값을 넣어주는 것이 맞는답.


Review🤩

스캐너를 쓰면 편하지만 버퍼리더가 성능 적으로 좋기 때문에 버퍼리더를 쓰는것이 좋아보인다


 

'Algorithm' 카테고리의 다른 글

[구름] 약수의 합  (0) 2021.12.25
[구름] 소수 판별  (0) 2021.12.25
[구름] Bubble Sort  (0) 2021.12.25
[구름] 369 게임  (0) 2021.12.25
[구름] 시험성적 평균과 등급 구하기  (0) 2021.12.25
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://level.goorm.io/exam/43243/bubble-sort/quiz/1

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이

level.goorm.io


Think🤔

알고리즘을 풀면서 버블 정렬은 필수라고 생각한다!

 

일단 첫번째 input에서 몇 개의 자연수를 받을지 값을 정한다.

그리고 두번째 라인에서 input값 만큼 자연수를 입력한다.

그리고 Bubble Sort를 이용해서 정렬 해서 출력한다.

 

두번째 라인에서는 띄어쓰기로 값을 받는다.


Solution✍
import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		String inputNum = br.readLine();
        
		String[] str = inputNum.split(" ");
		
		int[] arr = new int[str.length];
		
		for(int i=0; i<arr.length; i++){
			arr[i] = Integer.parseInt(str[i]);
		}
		
		int tmp = 0;
		for(int i=0; i<arr.length; i++){
			for(int j=i+1; j<arr.length; j++){
				if(arr[i] > arr[j]){
					tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
				}
			}
		}
		
		for(int i=0; i<arr.length; i++){
			System.out.print(arr[i]+" ");
		}
	}
}
import java.io.*;
class Main {
	
	public static void swap(int[] a, int i , int j){
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		String inputNum = br.readLine();
        
		String[] str = inputNum.split(" ");
		
		int[] arr = new int[str.length];
		
		for(int i=0; i<arr.length; i++){
			arr[i] = Integer.parseInt(str[i]);
		}
		
		for(int i=0; i<arr.length; i++){
			for(int j=i+1; j<arr.length; j++){
				if(arr[i] > arr[j]){
					swap(arr, i, j);
				}
			}
		}
		for(int i=0; i<arr.length; i++){
			System.out.print(arr[i]+" ");
		}
	}
}

swap 메서드를 만들어서 활용

 


Review🤩

버블 정렬의 장점

1. 추가적인 메모리 소비가 적음

2. 구현이 쉽다.

 

단점

다를 정렬 알고리즘에 비해 과정이 많아 시간을 소비함


 

'Algorithm' 카테고리의 다른 글

[구름] 소수 판별  (0) 2021.12.25
[구름] Substring  (0) 2021.12.25
[구름] 369 게임  (0) 2021.12.25
[구름] 시험성적 평균과 등급 구하기  (0) 2021.12.25
[구름] 약수 구하기  (0) 2021.12.25
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://level.goorm.io/exam/48757/369-%EA%B2%8C%EC%9E%84/quiz/1

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이

level.goorm.io


Think🤔

숫자 N이 주어졌을 때 3이 몇번 나왔는지 구하는 문제

만약 33이면 박수를 두번 쳐야함

그러면 이건 나눗셈을 이용하지 않고, 문자로 판별해야한다.

 

import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		int numInput = Integer.parseInt(input);
		
		int answer = 0;
		
		for(int i=2; i<=numInput; i++){
			for(int j=0; j<input.length(); j++){
				String strI = String.valueOf(i);
				if(strI.charAt(j) == '3' || strI.charAt(j) == '6' || strI.charAt(j) == '9'){
					answer++;
				}
			}
		}
		
		System.out.print(answer);
	}
}

어느게 잘못된 것일까..?

String index out of range : 1 이 나오는데

배열의 길이를 넘어다는것이다.

charAt은 0부터 검사한다는 것으로 알고있는데 

import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		int numInput = Integer.parseInt(input);
		
		int answer = 0;
		
		for(int i=2; i<numInput; i++){
			String strI = String.valueOf(i);
			for(int j=0; j<strI.length(); j++){
				if(strI.charAt(j) == '3' || strI.charAt(j) == '6' || strI.charAt(j) == '9'){
					answer++;
				}
			}
		}
		System.out.print(answer);
	}
}

코드를 보니 안의 for문을 돌때 br.readLine으로 받은 값은 한번만 생성되고 없어지는 것 같다?

아마 가비지 컬렉터에 의해 그 값을 읽고 바로 없어지므로 변수에 담아서 그 변수의 length() 만큼 돌려주는 것이 맞는 코드인 것 같다.


Solution✍
import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		int numInput = Integer.parseInt(input);
		
		int answer = 0;
		
		for(int i=2; i<numInput; i++){
			String strI = String.valueOf(i);
			for(int j=0; j<strI.length(); j++){
				if(strI.charAt(j) == '3' || strI.charAt(j) == '6' || strI.charAt(j) == '9'){
					answer++;
                    break;
				}
			}
		}
		System.out.print(answer);
	}
}

Review🤩

다시보니 readLine을 못읽는게 아니다. 따로 테스트 해보니깐 readLine은 생성되고 없어지는게 아니였다.

다만 i가 2로 시작할때 처음에 입력값을 35라고 해서 그 만큼 검사하는데 35는 길이가 2이고 처음 반복문이 시작하는 2는 문자열 길이가 1이기 때문이다!


 

'Algorithm' 카테고리의 다른 글

[구름] Substring  (0) 2021.12.25
[구름] Bubble Sort  (0) 2021.12.25
[구름] 시험성적 평균과 등급 구하기  (0) 2021.12.25
[구름] 약수 구하기  (0) 2021.12.25
[구름] 3과 5의 배수  (0) 2021.12.25
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://level.goorm.io/exam/43094/%EC%8B%9C%ED%97%98%EC%84%B1%EC%A0%81-%ED%8F%89%EA%B7%A0%EA%B3%BC-%EB%93%B1%EA%B8%89-%EA%B5%AC%ED%95%98%EA%B8%B0/quiz/1

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이

level.goorm.io


Think🤔

시험 성적의 평균과 등급 값을 나오게 하면 되는 문제이다.

 

그리고 입력이 띄어서 하나씩 과목이 들어오는데

이것을 split로 쪼개서 str에 담아주고 str 배열에 있는 값을 국어,수학,영어에 담아준다.

그리고 double형으로 해야되는데 3으로 나눴을 때 소수점 두자리 까지 나와야 하기 때문

 

성적 grade는 char로 받는데 초기화를 '\u0000' 또는 ' ' 띄어서 해줘야 한다.

 

그리고 switch문에 (int)average/10으로 설정해두고 

case 10 : case 9 : 이렇게는 'A'이고 나머지는 6까지 D를 해주고 default로 받아주는 것이 좋음

 

그리고 소수점 둘 째 짜리까지 출력하려면

System.out.printf를 썼을때 %.2f를 통해서 받는다.


Solution✍
import java.io.*;

class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		String[] str = input.split(" ");
		
		double korean = Double.parseDouble(str[0]);
		double math = Double.parseDouble(str[1]);
		double english = Double.parseDouble(str[2]);
		
		double average = (double)((korean + math + english) / 3);
		
		char grade = ' '; // char는 초기화 방법이 공백을 띄우거나 '\u0000'; 로 선언해줘야한다.
		
		switch((int)average/10){
			case 10 :
			case 9 : grade = 'A'; break;
			case 8 : grade = 'B'; break;
			case 7 : grade = 'C'; break;
			case 6 : grade = 'D'; break;
			default : grade = 'F';
		}
		
		System.out.printf("%.2f %s", average , grade);
	}
}

Review🤩

break 문을 넣어줌으로써 다 검사하지 않고, 또 char형으로 초기화 할때 ' ' 띄어쓰거나 '\u0000' 를 써야 한다는 것을 알게되었고,

printf에 대해서 정리해보자면..

 

%n : 줄바꿈

%s : String 형식으로 출력

%d : integer 형식으로 출력

%f : float 형식으로 출력

%t : date,time 형식으로 출력

%o : 8진수 integer 형식으로 출력

%x : 16진수 integer 형식으로 출력

%b : boolean 형식으로 출력

%e : 지수형식으로 출력

 

등이 있다.


 

'Algorithm' 카테고리의 다른 글

[구름] Bubble Sort  (0) 2021.12.25
[구름] 369 게임  (0) 2021.12.25
[구름] 약수 구하기  (0) 2021.12.25
[구름] 3과 5의 배수  (0) 2021.12.25
[구름] 홀짝 판별  (0) 2021.12.25
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://level.goorm.io/exam/43255/%EC%95%BD%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0/quiz/1

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이

level.goorm.io


Think🤔

양의 정수를 입력 받고 스 수의 약수를 모두 출력하라는 문제


Solution✍
import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		int numAnswer = Integer.parseInt(str);
		
		int answer = 0;
		
		for(int i=1; i<=numAnswer; i++){ // 자기 자신까지 약수이므로 <=
			if(numAnswer % i == 0){ // 나눴을떄 나머지가 0이면 약수이므로
				System.out.printf("%d ",i);
			}
		}
	}
}
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int numAnswer = Integer.parseInt(br.readLine());

5,6라인의 문장을 변수를 두개 안쓰고 하나를 써서도 풀이할 수 있었다.


Review🤩

printf를 이용해서 풀어보았다 2d를 하면 두번 띄어쓰기가 되고, 하나를 하면 하나 밖에 되지 않는다.

저렇게 말고 System.out.print(i + " "); 이런식으로 띄워서 풀 수 있는것 같다.


 

'Algorithm' 카테고리의 다른 글

[구름] 369 게임  (0) 2021.12.25
[구름] 시험성적 평균과 등급 구하기  (0) 2021.12.25
[구름] 3과 5의 배수  (0) 2021.12.25
[구름] 홀짝 판별  (0) 2021.12.25
[프로그래머스] 서울에서 김서방 찾기  (0) 2021.12.12
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://level.goorm.io/exam/43166/3%EA%B3%BC-5%EC%9D%98-%EB%B0%B0%EC%88%98/quiz/1

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이

level.goorm.io


Think🤔

1000이하의 자연수를 입력하고 자연수 중 3의 배수, 5의 배수의 합을 구하는 프로그램을 작성하시오.

 

일단 3의 배수이면서도 5의 배수인 문제가 아니고 3의 배수고 또 5의 배수인 값을 값을 찾는 문제이다.


Solution✍
import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		int numberInput = Integer.parseInt(input); //input을 숫자형으로 바꿔줌
		int sum = 0; // 합계
		
		for(int i=0; i<=numberInput; i++){
			if(i % 3 == 0 || i % 5 == 0){
				sum += i;
			}
		}
		
		System.out.print(sum);
	}
}

while문으로 고쳐본다.

while문은 스캐너까지 이용해서 풀어본다.

import java.util.Scanner;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int input = sc.nextInt(); // 사용자의 input int값을 받는다.
		int i = 3; // 3이하는 3의 배수가 아니기 때문에 최소 3부터 시작한다
		int sum = 0; // 합계
		while(input >= i){
			if(i % 3 == 0){ 
				sum += i;
			}else if(i % 5 == 0){ // if 조건에 안들어가면 그 다음에 맞는지? 확인하는 구문
				sum += i;
			}
			i++;
		}
		System.out.print(sum);
	}
}

Review🤩

while문 for문을 다시 한번 적어 보았다.


 

+ Recent posts