매일 Algorithm

신재원·2023년 2월 27일
0

Algorithm

목록 보기
50/243

백준 11655 (bronze 1)

import java.util.Scanner;

public class problem125 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        String st = in.nextLine();

        for (int i = 0; i < st.length(); i++) {
            char ch = st.charAt(i);
            // 문자 아스키 코드값을 비교후 +13, 
            // 다시 아스키값을 되돌리기위해 -26을 해주었다.
            if (ch >= 'A' && ch <= 'Z') {
                ch += 13;
                if (ch > 'Z') {
                    ch -= 26;
                }
            } else if (ch >= 'a' && ch <= 'z') {
                ch += 13;
                if (ch > 'z') {
                    ch -= 26;
                }
            }
            System.out.print(ch);
        }
    }
}
/*
1. 문자찾기
설명
한개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 
입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성하세요.
대소문자를 구분하지 않습니다. 문자열의 길이는 100을 넘지 않습니다.

입력
첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어진다.
문자열은 영어 알파벳으로만 구성되어 있습니다.

출력
첫 줄에 해당 문자의 갯수를 출력한다.

*/
import java.util.Scanner;

public class problem121 {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        String st = in.next().toUpperCase();
        String mt = in.next().toUpperCase();
        char[] chars = mt.toCharArray();

        int count = 0;
        for(int i = 0; i < st.length(); i++){
            char ch = st.charAt(i);
            for(int j = 0; j < chars.length; j++) {
                if (ch == chars[j]) {
                    count++;
                }
            }
        }

        System.out.print(count);
    }
}
/*
문제 설명
5*5 격자판에 아래와 같이 숫자가 적혀있습니다.

N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 
두 대각선의 합 중 가 장 큰 합을 출력합니다.

​

▣ 입력설명

첫 줄에 자연수 N이 주어진다.(1<=N<=50)

두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다.

각 자연수는 100을 넘지 않는다.

​

▣ 출력설명

최대합을 출력합니다.

​

▣ 입력예제 1



▣ 출력예제 1

155
*/

import java.util.Scanner;

public class problem122 {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int size = in.nextInt();

        int [][] arr = new int[size][size];
        for(int i = 0; i <size; i++){
            for(int j = 0; j < size; j++){
                arr[i][j] = in.nextInt();
            }
        }
        int answer = Integer.MIN_VALUE;
        int sum1;
        int sum2;
        for(int i = 0; i < size; i++){
            sum1 = sum2 = 0;
            for(int j = 0; j < size; j++){
                sum1 += arr[i][j]; // 행 고정, 열 이동
                sum2 += arr[j][i]; // 행 이동, 열 고정
            }
            answer = Math.max(answer,sum1);
            answer = Math.max(answer,sum2);
        }

        int cross = 0;
        int reverseCross =0;
        for (int i = 0; i < size; i++) {
            cross += arr[i][i]; // 대각선을 구하는 로직
            reverseCross += arr[i][size-i-1];
        }
        answer = Math.max(answer, cross);
        answer = Math.max(answer, reverseCross);
        System.out.print(answer);
    }
}

/*
문제 설명 (투 포인터로 해결)
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 
오름차순으로 합쳐 출력하는 프로그램을 작성하세요.

입력

첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.

두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.

세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.

네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.

각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.



출력

오름차순으로 정렬된 배열을 출력합니다.

예시 입력

3
1 3 5
5
2 3 6 7 9
예시 출력

1 2 3 3 5 6 7 9
*/
import java.util.ArrayList;
import java.util.Scanner;

public class problem123 {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        ArrayList<Integer> answer = new ArrayList<>();

        int aSize = in.nextInt();
        int [] arr = new int[aSize];
        for(int i = 0; i < aSize; i++){
            arr[i] = in.nextInt();
        }

        int bSize = in.nextInt();
        int [] brr = new int[bSize];
        for(int i = 0; i < bSize; i++){
            brr[i] = in.nextInt();
        }

        int p1= 0, p2 = 0;
        while(p1 < aSize && p2 < bSize ){
            // p1이 가르키는 값을 add하고 그 다음 p1++이 된다.
            if(arr[p1] < brr[p2]) {
                answer.add(arr[p1++]);
            }
            // brr배열이 더작은값인 경우
            else{
                answer.add(brr[p2++]);
            }
        }
        // 위의 조건중 p2 < bSize가 만족하지 못하는 조건일경우
        // 아직까지 이 조건은 유효하다.
        while(p1 < aSize){
            answer.add(arr[p1++]);
        }

        // 위 로직과 마찬가지.
        while(p2 < bSize){
            answer.add(brr[p2++]);
        }
        for(int result : answer){
            System.out.print(result + " ");
        }

    }
}
/*
학급 회장
문제 설명
학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 
쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 
학급 회장이 되었는지 출력하는 프로그램을 작성하세요. 
반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.

출력
▣ 입력설명
첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.
두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 
선생님이 발표한 순서대로 문자열로 입력됩니다.

▣ 출력설명
학급 회장으로 선택된 기호를 출력합니다.

▣ 입력예제 1
15
BACBACCACCBDEDE

▣ 출력예제 1
C
*/
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class problem124 {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int size = in.nextInt();
        Map<Character, Integer> map = new HashMap<>();

        String m = in.next();
        
        for (int i = 0; i < size; i++) {
            char ch = m.charAt(i);
            // map의 값을 담고, key값이 존재하지 않으면 0으로 반환
            map.put(ch, map.getOrDefault(ch, 0) + 1);
        }

        int max = Integer.MIN_VALUE;
        char solution = ' ';
        // key값을 찾아 for each문으로 돌린후, value값을 찾아 비교를한다.
        for (char c : map.keySet()) {
            int result = map.get(c);

            if (result > max) {
                max = result;
                solution = c;

            }
        }
        System.out.print(solution);
    }
}

0개의 댓글