-
[백준/BOJ] 1296번 : 팀 이름 정하기 (JAVA / 자바)백준 2022. 2. 16. 15:12
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1296
- 문제 -
난이도 브론즈 1 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
연두의 영어이름과 팀 이름에 LOVE의 철자가 몇개씩 들어가 있는지를 파악해서 (L + O) * (L + V) * ... *(V + E)를 연산해줘야한다.
그렇다면 우선 연두의 영어이름에 L,O,V,E가 몇개씩 들어가있는지와 침 이름에 몇개씩 들어가 있는지를 구한다.
L 개수, O 개수, V개수, E개수를 구해서 위 공식으로 계산해준다. 그렇게해서 나온 값들을 mod 100 해주고 나온 값들중 제일 큰 값을 가진 팀을 출력해주면 된다.(mod란 %. 즉 나머지를 구하란 뜻이다.)
영어이름과 팀 이름들은 문자열로 받는다. 문자열 안에 L,O,V,E가 몇개 있는지는 replace 함수를 사용해 얻을 것이다.
replace는 문자열에서 특정 문자를 지우는 함수이다.
방식은 replace를 하기 전 문자열 길이에서 replace를 하고 난 뒤의 문자열의 길이를 빼주면 제외한 특정 문자의 개수를 알 수 있다. 이렇게 구한 값들을 배열에 저장한다. 배열은 LOVE의 철자 개수인 4개 크기로 만들어 준다. 배열에 철자 별 개수가 저장이 되었으면 0인덱스부터 3인덱스까지 순차적으로 연산 방식을 도입해 연산해준다. 그렇게 나온 값들로 100으로 나눈 나머지를 구하고 최댓값을 구해서 제일 확률이 큰 팀의 이름을 출력한다.
하지만 최댓값인 팀이 여러 팀일 수 있다. 그럴때는 사전적으로 앞에오는 팀 이름을 출력하라고 한다. 그럼 그 팀 들을 배열에 넣고 정렬을 해서 0인덱스에 위치한 값을 출력하면 된다.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { //LOVE 철자마다 개수를 저장하기 위한 배열 static int[] arr = new int[4]; //최댓값은 100으로 나눴을때 0이 올 수도 있기 때문에 -1로 선언 static int max = -1; static String love = "LOVE"; //우승확률이 높은 팀 이름을 저장하기 위한 변수 static String win = ""; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String Ename = br.readLine(); int N = Integer.parseInt(br.readLine()); for(int i = 0; i < N; i++) { String Tname = br.readLine(); //L부터 E까지 순차적으로 팀 이름과 연두 이름에 포함된 개수를 배열에 저장 for(int j = 0; j < 4; j++) { int sum = Ename.length() - Ename.replace(String.valueOf(love.charAt(j)), "").length(); sum += Tname.length() - Tname.replace(String.valueOf(love.charAt(j)), "").length(); arr[j] = sum; } //(L+O) × (L+V) × (L+E) × (O+V) × (O+E) × (V+E)의 연산 값을 저장하기 위한 변수 int total = 1; //연산하는 반복문 for(int j = 0; j < 4; j++) { for(int k = (j + 1); k < 4; k++) { total *= (arr[j] + arr[k]); } } //현재 확률 최댓값과 이번 팀이름의 확률 값이 같을때 if(max == (total % 100) && win != "") { String[] arr2 = new String[2]; arr2[0] = win; arr2[1] = Tname; Arrays.sort(arr2); win = arr2[0]; } //팀이름의 확률 값이 더 클때 if(max < (total % 100)) { max = total % 100; win = Tname; } } System.out.println(win); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 10984번 : 내 학점을 구해줘 (JAVA / 자바) (0) 2022.02.16 [백준/BOJ] 1037번 : 약수 (JAVA / 자바) (0) 2022.02.16 [백준/BOJ] 1259번 : 팬린드롬수 (JAVA / 자바) (0) 2022.02.15 [백준/BOJ] 1252번 : 이진수 덧셈 (JAVA / 자바) (0) 2022.02.15 [백준/BOJ] 1233번 : 주사위 (JAVA / 자바) (0) 2022.02.15