본문 바로가기
JAVA

221004

백준 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인지 등 어떻게 받는지를 확인해야 나중에 활용할 때 정확히 할 수 있다. 

'JAVA' 카테고리의 다른 글

221006 Class와 메서드, 생성자 실습  (0) 2022.10.06
221005  (0) 2022.10.05
220930  (0) 2022.09.30
220929  (0) 2022.09.29
220928  (0) 2022.09.28