백준 1157번 단어 공부
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String word = scan.next();
String str =word.toUpperCase();
char[] arr = str.toCharArray();
int[] findword = new int[26];
for(int i=0;i<arr.length;i++) {
for(int j=65;j<=90;j++) {
if(arr[i]==j) {
findword[j-65]++;
}
}
}
char[] alp= new char[26];
for(int i=0;i<alp.length;i++) {
alp[i]=(char)(i+65);
}
int max = 0;
for(int i =0;i<findword.length;i++) {
if(max<findword[i]) {
max=findword[i];
}
}
int count = 0;
int index=0;
for(int i =0;i<findword.length;i++) {
if(max==findword[i]) {
count++;
index =i;
}
}
if(count<=1) {
System.out.println(alp[index]);
}else {
System.out.println("?");
}
}
}
알파벳 배열을 만들고(A~Z)
문자가 몇 개 나왔는지 개수를 적는 배열을 만든다.
두 배열을 나란히 출력하면 어느 알파벳이 몇 개 나왔는지가 눈에 보이게 된다.
이후 가장 많이 나오는 배열일 때 그 문자가 어떤 문자인지 확인하기 위해 index라는 변수를 선언한다.
알파벳 배열의 인덱스([ ]안)에 변수 index에 저장된 값을 넣어 출력하면 원하는 알파벳이 나온다.
또한, 카운트 변수를 만들어 가장 많이 나오는 수가 2번 이상이 될 경우 문제가 요구한대로 ?를 출력한다.
가장 많이 나오는 수가 2번 이상이 될 때를 구하기 위해 count변수를 선언하는 것과,
가장 많이 사용된 알파벳을 구해야 하므로 알파벳 배열의 인덱스를 알기 위해 "index 변수를 선언한다"는 생각만 하면 쉽게 풀 수 있는 문제.
eclipse MethodEx01
package day04;
import day01.SystemOut;
public class MethodEx01 {
public static void main(String[] args) {
//메서드는 메서드 내부에 생성 할 수 없습니다.
//main 밖에, 클래스 안에 어디서든 선언 할 수 있습니다.
//메서드의 호출-이름()
//System.out.println( calSum() );
int result = calSum();
System.out.println(result);
int result2 = calSum();//언제든 메서드를 받아올 수 있다.
System.out.println(result2);
String result3 = ranStr();
System.out.println(result3);
String result4 = ranStr2();
System.out.println(result4);
}//메인 끝
//반환은o 매개값x - 1부터 10까지 합
static int calSum() {//메서드
//1~10까지 합
int sum = 0;
for(int i=1;i<=10;i++) {
sum+=i;
}
return sum; //둘 다 정수므로 sum을 result에 실을 수 있다.
}
//반환은o 매개값x - 문자열의 결과 반환
static String ranStr() {
String str = ""; //A + B + C ...Z
for(char c = 'A';c<='Z';c++) {
str +=c;
}
return str;//String의 기본값 null;
}
//반환은o 매개값x - return키워드의 활용
static String ranStr2() {
double d = Math.random();//얘도 메서드다.
if(d>0.66) {
return "가위";
}else if(d>0.33) {
return "바위";
}else {
return "보";
}
/*
String str;
if(d>0.6) {
str = "가위";
}else if(d>0.33) {
str = "바위";
}else {
str = "보";
}
return str;
*/
}
}
메서드는 함수이며 뒤로 빼낸다는게 가장 중요하다.
메서드=함수
무언가를 받고, {}에서 기능을 하고, 결과를 출력
생성하고, 필요하면 언제든 호출하여 사용 가능
메서드 선언 방법
데이터 타입(메서드를 실행하고 돌려줄 때의 타입. 리턴타입이라고도 함)
이름(임의지정)
입력 변수()-(메서드가 어떤 값을 입력받을 수 있는 값. 입력받는 타입. parameters or 매개변수)
데이터 타입 이름(입력 변수)
{
...
}
반환 유형과 매개 변수는 각각 있을 수도 없을 수도 있다. 그 유무에 따라 메서드는 총 가짓수는 4가 된다.
매개 변수
-받는 값이 없으면 ()를 비워 둘 수 있다
-한번에 여러 개를 받을 수도 있다
-메서드의 소괄호 부분에 데이터 타입과 함께 선언, 초기화는 하지 않음
반환 유형
-메서드를 호출한 곳에 반환하는 값의 데이터 타입
-반환 유형이 없으면 비우는 것이 아니라 'void'를 적는다.
-있으면 맞는 타입을 적어 준다
-돌려주는 값이 있다면 return이라는 키워드를 사용한다.
-return은 {}안에 있다.
-return은 반드시 하나가 있어야 한다. 단, 조건에 맞게 다양한 return이 나오게 할 수 있다.
우리가 만들던 main 역시 메서드이다.
자바는 메서드를 main 위든 아래든 상관없다. 객체지향 특징. 단, main 밖에, 클래스 안에.
return은 1.값을 실는다 2.종료한다 의 두가지 의미가 있다. 종료 이후 뭘 적을 수 없기에 강제종료시에 사용
eclipse MethodEx02
package day04;
public class MethodEx02 {
public static void main(String[] args) {
/*
* 매개변수(parameter)
* 1.매개변수는 메서드를 호출할 때 필요한 값을 전달하는 매개체.
*2. 매개변수는 몇 개 받을지 메서드를 선언할 때 결정 해줍니다.
*/
int result= calSum(10);
System.out.println("1~10까지의 합:"+result);
int result2 = calSum(100);//메서드 재활용
System.out.println("1~100까지의합:"+result2);
//calSum2();
int result3 = calSum2(10, 20);
System.out.println("10~20까지 합:"+result3);
}
//반환o, 매개변수o
static int calSum(int end) {
int sum = 0;
for(int i =1; i<=end;i++) {
sum+=i;
}
return sum;
}
//반환o, 매개변수o-매개변수가 여러개
static int calSum2(int start, int end) {
int sum=0;
for(int i=start;i<=end;i++) {
sum+=i;
}
return sum;
}
}
eclipse MethodEx03
package day04;
public class MethodEx03 {
public static void main(String[] args) {
/*
* 반환유형(return type)
* 1. 반환유형은 메서드가 돌려주는 값에 대한 타입.
* 2. 반환유형이 있는 메서드는 호출 구문이 값이 되기 때문에 메서드의 매개값으로 사용될 수 있습니다.
* ex) println(메서드 호출)
* 3. 모든 메서드는 return을 만나면 강제종료 됩니다.
* 4. 리턴문 아래에는 코드를 작성할 수 없습니다.
*/
//int result = add(3,5);
//System.out.println("결과:"+result);
//System.out.println(add(3,5));
//()를 가진 애 중에서 메서드가 아닌 건 없다. println()도, charAt()도, split()도 전부 메서드임. 메서드 안에 메서드가 들어가는 것이 가능하다(반환이 있다면)
System.out.println( add( add(1,2), add(2,3) ) );
//int r = sub(1,2); 불가능.void를 int로 받을 수 없다
//System.out.println(sub(1,2)); 반환이 없으므로 불가능
sub(1,2); //호출만 가능.
noReturn("hello");
noReturn("bye");
}
//반환o, 매개변수o
static int add(int a, int b) {
return a+b;
}
//반환x, 매개변수o - 리턴이 없음. (단순 실행)
static void sub(int a, int b) {
System.out.println("a-b=" + (a-b));
//return; 굳이 적지는 않지만 void형에서도 return 키워드를 사용할 수는 있다. 이때 사용되는 return은 값을 실어주는 것이 아닌 종료의 의미를 갖는다.
//따라서 이 아래에 뭘 적을 수 없다. 강제종료시 사용
}
//void형에서 return-종료
static void noReturn(String s) {
if(s.equals("hello")) {
System.out.println("실행종료");
return;//종료
}
System.out.println(s);
}
}
println(), charAt(), split() 등 ()가 있는 것은 모두 메서드다. 만약 메서드가 반환을 한다면, 메서드 안에 메서드를 넣는 것도 가능하다.
eclipse Quiz21
import java.util.Scanner;
public class Quiz21 {
public static void main(String[] args) {
//메서드로 변환
// 1 - 입력받은 값을 반환시키고 (재활용)
// Scanner scan = new Scanner(System.in);
// int a = scan.nextInt();
// int b = scan.nextInt();
// 2
// int result = a + b;
// 3
// System.out.println("두 수의 합:"+result);
System.out.println("두 수 입력>");
int a=input();
int b=input();
int result = add(a,b);
showResult(result);
}
static int input() {
Scanner scan = new Scanner(System.in);
return scan.nextInt();
}
static int add(int a, int b) {
return a+b;
}
static void showResult(int result) {
System.out.println("두 수의 합:"+ result);
}
}
두 수 입력>
54
24
두 수의 합:78
메서드 안에 Scanner를 사용할 수 있지만, 우리가 푸는 문제에서 입력받는다는 건 호출할 때 넣겠다는 의미가 크니 굳이 사용하지 않아도 된다.
eclipse Quiz22
import java.util.Scanner;
public class Quiz22 {
public static void main(String[] args) {
method1();
System.out.println(method2("hello"));
System.out.println(method3(1,2,2.7));
System.out.println(method4(8));
method5("안녕",7);
System.out.println(maxNum(2,7));
System.out.println(abs(-64));
String str =java(9);
System.out.println(str);
System.out.println(sum(6));
}//바로 출력했는데, 어떻게 받는지도 확인하기. int인지, double인지, String인지 등
static void method1() {
System.out.println("안녕");
}
static String method2(String s) {
return s;
}
static double method3(int a, int b, double c) {
double d = a+b+c;
return d;
}
static String method4(int a) {
if(a%2==0) {
return "짝수";
}else {
return "홀수";
}
}
static void method5(String a, int b) {
for(int i=1;i<=b;i++) {
System.out.print(a);
}
System.out.println();
}
static int maxNum(int a, int b) {
return a>b?a:b;
}
static int abs(int a) {
return a>0? a:-a;
}
static String java(int a){
String s="";
for(int i=1;i<=a;i++) {
if(i%2==0) {
s+="바";
}else {
s+="자";
}
}
return s;
}
static int sum(int a) {
int sum =0;
for(int i=1;i<=a;i++) {
if(a%i==0) {
sum+=i;
}
}
return sum;
}
}
안녕
hello
5.7
짝수
안녕안녕안녕안녕안녕안녕안녕
7
64
자바자바자바자바자
12
위의 경우 메서드가 반환을 하기 때문에 바로 출력에 사용했다.
그래도 메서드가 어떤 형식을 받고 출력하는지늘 꼭 확인해야 한다. int인지, double인지, String인지 등 어떻게 받는지를 확인해야 나중에 활용할 때 정확히 할 수 있다.