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

 

제목 참조


Think🤔

 

출력 결과 값을 유추해보니 70 90 80 이면 평균이 80이므로 80초과인 점수가 전체중의 몇프로인지 구하는 문제임
여기서 기억이 안나는건 소수점 4자리에서 3자리까지 표현하는 방법 %f로 3f뭐 했었던 것 같은데 일단 해본다.

처음에 받는 숫자 값이 배열의 갯수이고 이만큼 출력하면 됨.
한 줄씩 출력하므로 sysout에 ln을 붙여주도록 하자.


Solution✍

 

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
		
		for(int i=0; i<num; i++){
			String[] inwon = br.readLine().split(" ");
			
			double sum = 0;
			for(int j=1; j<Integer.parseInt(inwon[0]) + 1; j++){
				sum += Double.parseDouble(inwon[j]);
			}
			double avg = sum / Double.parseDouble(inwon[0]);
			
			double pass = 0;
			for(int j=1; j<Integer.parseInt(inwon[0]) + 1; j++){
				if(Double.parseDouble(inwon[j]) > avg){
					pass++;
				}
			}
			// % 써야하므로 escape필요 두번 써야함
			System.out.printf("%.3f%%\n",(pass / Double.parseDouble(inwon[0])) * 100);
		}
    }
}

Review🤩

 

1. String으로 split 해서 받았는데 inwon[0]을 반복문에서 그대로 썻음 바꿔서 써야함
2. Systehttp://m.out.printf("%.3f%%\n",(pass / Double.parseDouble(inwon[0])));
 -> Systehttp://m.out.printf("%.3f%%\n",(pass / Double.parseDouble(inwon[0])) * 100); * 100을 넣어서 통과했는데
 pass는 3개 , 인원은 5개 그럼 * 나중에 인데 0.xx 이런식으로 나오는데 여기서 * 100을 해야 퍼센트 값이 나오기 때문


 

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

 

단어 공부


Think🤔

 

가장 많이 사용된 단어 출력 대문자로
Mississipi -> i가 4번 , s가 4번이므로 "?" 출력 
zZa -> Z 출력
baaa -> A 출력

HashMap으로 저장 후 가장 큰 value값 출력


Solution✍

 

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = "";
        str = br.readLine().toUpperCase();
		
		HashMap<Character, Integer> hs = new HashMap<>();
		
		// hs에 HashMap으로 key , value 값 넣어주기
		for(char c : str.toCharArray()){
			hs.put(c, hs.getOrDefault(c,0) + 1);
		}
		
		char ans = '?'; // 정답 기본값 '?"
		int max = 0;
		
		for(Map.Entry<Character, Integer> entry : hs.entrySet()){ 
			char c = entry.getKey();
			int eVal = entry.getValue();
			
			if(eVal > max){ 
				max = eVal; 
				ans = c;
			}else if(eVal == max){
				ans = '?';
			}
		}
		
		System.out.print(ans);
    }
}

 


Review🤩

 

1. Map.Entry 사용법에 대해서 검색해봤음. entry하면 hs 키 - 값 밸류를 뽑아서 반복문 돌릴 수 있음.
2. char c : str 돌릴려고 했는데 toCharArray() 
 -> str로 안되는 이유 : String 클래스가 'Iterable' 인터페이스를 구현하지 않아서 그럼
3. for문에서 break 추가 엔트리 2개 이상일 경우 그 다음부터 검증 안해도 되므로 break;해주는게 효과적
4. 맨 처음 readLine 받을 때 UpperCase 하는 것이 더 바람직
5. values()로 반복문 돌려서 max 먼저 알아 냈는데 그것보다 , max 값이 두개이면 '?'을 나오게하고, 그 외에 제일 큰 값이면 해당 c를 출력하게 바꿔줌.


 

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

 

26이면 뒤의 숫자 자리수 6을 고정
6(고정) | 2+6 = 68
8(고정) | 6+8 = 84
4(고정) | 8+4 = 42 // 십의자리 제거 나머지로만
2(고정) | 4+2 = 26

총 4번만에 돌아왔고 이 값을 출력하는 문제

예외로는 10자리 미만의 수는 앞에 0을 붙여 두 자리 수로 만듦.

1일 경우
0을 붙임 -> 01
0(고정) | 0+1 = 01
1(고정) | 1+1 = 12
2(고정) | 1+2 = 23
3(고정) | 2+3 = 35
.....
끝까지 검증은 코드를 이용해서


 

Think🤔

 

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main{
	public static void main(String args[]) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String chk = br.readLine();
		int ans = 0;
		
		String init = chk; // 초기값 돌아왔으면 그만하기 위함
		
		if(chk.length() < 2){ // 10자리 미만의 수는 앞에 0을 붙임
			chk = "0" + chk;
		}
		
		// 초기에는 무조건 같으니 한번은 검사하고 해야하므로 do-while문 이용
		do{
			chk = chk.charAt(0) + (Integer.parseInt(chk.charAt(0)) + Integer.parseInt(chk.charAt(1)));
			ans++;
		}while(!init.equals(chk)); // 같지 않을 동안 반복하는 것
		
		System.out.print(ans);
	}
}

 

자릿수를 구할때 이런식으로 작성했음
chk = chk.charAt(0) + (Integer.parseInt(chk.charAt(0)) + Integer.parseInt(chk.charAt(1)));
하지만 charAt을 이용해서 숫자를 구하는 방식은 이게 아님 , Character.getNumericValue을 이용


Solution✍

 

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main{
	public static void main(String args[]) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String chk = br.readLine();
		int ans = 0;
		
		if(chk.length() < 2){ // 10자리 미만의 수는 앞에 0을 붙임
			chk = "0" + chk;
		}
		
		String init = chk; // 초기값 돌아왔으면 그만하기 위함
		
		// 초기에는 무조건 같으니 한번은 검사하고 해야하므로 do-while문 이용
		do{
			int sum = Character.getNumericValue(chk.charAt(0)) + Character.getNumericValue(chk.charAt(1)); // 합계 에서 나머지 해야함
			chk = chk.charAt(1) + String.valueOf(sum % 10); // 나머지 값
			ans++;
		}while(!init.equals(chk)); // 같지 않을 동안 반복하는 것
		
		System.out.print(ans);
	}
}

// String init = chk; 값 위치 때문에 예외가 발생했었음.
// 10이하의 값은 0이붙는데 do while에서 체크하면서 "0"이 붙어서 그 전에 init = chk를 설정하면 안됨.

// 0을 붙인 후 init을 설정해야 함.

 

Review🤩

 

배열의 크기를 알파벳 수 26으로 만들어서 푼 사람들도 있음 참신하다 생각


 

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

 

č c=
ć c-
dž dz=
đ d-
lj lj
nj nj
š s=
ž z=

 

c= 같은 패턴은 1로 처리

패턴외에 나머지 문자 1로 처리


Think🤔

 

해결에 같이 작성


Solution✍

 

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main{
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();
		int size = str.length();
		
		String[] check = {"c=","c-","dz=","d-","lj","nj","s=","z="};
		
		for(String cro : check){
			str = str.replace(cro,"1");
		}
		
		System.out.print(str.length());
	}
}

// 위 코드의 문제점은 문자열이 줄어드는 속도가 너무 느리기 때문. ++
// while문으로 무한루프에 빠짐 애초에 글자가 변해서 0까지 가는 경우가 없음..
/*
[
		while(size > 0){ // 사이즈 있는 동안 계속 반복
			for(int i=0; i<check.length; i++){
				if(str.contains(check[i])){
					str = str.replace(check[i],""); // 하나제거
					ans++;
				}
			}
		}
]
*/
//이 부분은 작성된 잘못된 코드임 while문부터 시작해서 논리적으로 오류가 많음.

Review🤩

 

해결법에 작성


 

'Algorithm' 카테고리의 다른 글

[백준] 브1 > 단어 공부  (1) 2024.09.11
[백준] 브론즈 1 > 더하기 사이클  (0) 2024.09.10
[백준] 브론즈1 평균 1546번  (0) 2024.09.07
[백준] 실5 셀프 넘버  (1) 2024.09.07
[백준] 실5 수 정렬하기2  (0) 2024.09.06
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

평균 1546번


Think🤔

 

엄청 간단하지는 않음


Solution✍
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
	
		String[] score = br.readLine().split(" ");
		
		int max = 0;
		
		for(int i=0; i<num; i++){
			max = Math.max(Integer.parseInt(score[i]),max);
		}
		
		double sum = 0;
		
		for(int i=0; i<num; i++){
			sum += (double)(Double.parseDouble(score[i]) / max) * 100;
		}
		
		System.out.println((double) sum / num);
    }
}

 

Review🤩

 

최대 값 : M
모든 점수를 점수/M * 100 으로 고침.

다 한 후 평균 구하는 문제
>> 해결 시도횟수 많음 .. Input을 한 줄로 주는게 아니고 공백을 띄워서 줘서 String으로 받은 후 또 소수점으로 나오는 값 Double로 나누어서 처리해야 하기 때문


 

'Algorithm' 카테고리의 다른 글

[백준] 브론즈 1 > 더하기 사이클  (0) 2024.09.10
[백준] 크로아티아 알파벳 2941번  (2) 2024.09.08
[백준] 실5 셀프 넘버  (1) 2024.09.07
[백준] 실5 수 정렬하기2  (0) 2024.09.06
[백준] 실버5 그룹 단어 체커  (0) 2024.09.05
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

셀프넘버


 

Think🤔

 

static 메소드를 만들어서 d(i) 구하는 함수를 구현할 건데
간단하게 static은 메소드는 인스턴스 생성하지 않고 호출 가능 , 메모리 효율성 , 유틸리티 메서드여서 수학적계산이나 문자열 처리와 같은 작업을 수행할때 겍체의 상태와 무관하게 독립적으로 진행됨

일단 셀프 넘버 d(i)를 구하는 공식

public static int d(int n){
int sum = n;
while(n > 0){
sum += (n % 10); // 자릿수 더하기 13이면 3
n /= 10; // 다음 1까지 해야되므로
}
return sum;
}


Solution✍

 

import java.util.HashSet;
import java.util.Set;

class Main{
    public static void main(String[] args) {
		Set<Integer> a1 = new HashSet<>();
		Set<Integer> a2 = new HashSet<>();
		
		for(int i=1; i<10000; i++){
			a1.add(i);
			a2.add(d(i));
		}
		
		a1.removeAll(a2);
		
		for(int num : a1){
			System.out.println(num);
		}
    }
	
	public static int d(int n){
		int sum = n;
		while(n > 0){
			sum += (n % 10); // 자릿수 더하기 13이면 3
			n /= 10; // 다음 1까지 해야되므로
		}
		return sum;
	}
}

 

Review🤩

 

Set을 이용하여 처리


 

+ Recent posts