오늘은 여태 배웠던 문제들을 풀어보는 시간을 가져보았다.
다음과 같은 태그로부터 검색어들을 수집해라
#맛집#좋반#칭구구해요#갬성#부평핫플
public static void main(String[] args) {
// 태그
String tags = "#맛집#좋반#칭구해요#갬성#부평핫플";
// 키워드 모음 (배열)
String[] keyWords = tags.split("#"); // # 구분자(매개변수)
for (String keyWord : keyWords) {
System.out.println(keyWord);
}
}
}
foreach문과 split을 사용하여 작성하였다.
tags에 값을 입력한 후 split으로 # 부분을 기준으로 잘라내었다.
그 뒤 keyWords에 저장 후 배열을 생성하였다.
그 뒤 foreach문을 사용해 keyWords 안에 있는 값들을 하나씩 keyWord 변수에 저장하며 반복 출력하였다.
가로, 세로를 입력하면 넓이를 구하는 함수를 정의하라.
public class Main {
// 가로, 세로를 입력받아 넓이를 반화하는 함수
static int area(int width, int height) {
return width * height;
}
public static void main(String[] args) {
System.out.println(area(120,60));
}
}
int add 함수를 통해 작성해보았다.
width와 height 변수를 선언하였고 return을 사용해 w와 h를 곱한 값을 반환하도록 하였다.
main에서 함수를 불러와서 출력해주면 원하는 값이 나오게 된다.
세 점수를 입력받아 평균을 구하는 프로그램을 작성하라.
public class Main {
static double average(double a, double b, double c) {
return (a + b + c)/3;
}
public static void main(String[] args) {
System.out.println(average(30, 90, 44));
}
double을 사용하여 소수점 자리까지 출력되게 만들었다.
average 안에 변수 a, b, c를 선언하고 return을 사용해 세 값을 더한 후 3으로 나눈 평균값을 반환하도록 하였다.
그런 다음 main에서 average(a, b, c)에 값을 넣어주면 자동으로 return 값이 나오는 것을 확인할 수가 있다.
점수를 입력하면 다음과 같이 성적을 반환하는 프로그램을 구현하라.
90 점이상 = A
80 이상 90 미만 = B
70 이상 80 미만 = C
60 이상 70 미만 = D
70 미만 = F
public class Main {
static char getGrade(int score) {
if (score >= 90) {
return 'A';
} else if (score < 90 && score >= 80) {
return 'B';
} else if (score < 80 && score >= 70) {
return 'C';
} else if (score < 70 && score >= 60) {
return 'D';
} else {
return 'F';
}
}
public static void main(String[] args) {
System.out.println(getGrade(80));
}
}
char를 사용해 성적이 한 글자만 출력되게 만들었다.
getGrade에 함수를 사용해 int score에 점수를 입력할 수 있게 만들었고
if와 else if문을 사용해 점수 범위에 따라 성적을 반환하도록 조건을 작성하였다.
main에서 getGrade(숫자)를 출력해보면 숫자에 따라 지정된 성적이 나오는 것을 확인할 수 있다.
다음과 같은 나이 그룹이 있을 때 반복문을 활용해 성인만 출력하라.
나이 그룹 : 12, 15, 21, 32, 38
public class Main {
public static void main(String[] args) {
int[] ages = {12, 15, 21, 32, 38};
for (int age : ages) {
if (age >= 18) {
System.out.println(age);
}
}
}
}
배열을 사용해 여러 나이를 ages에 저장했다.
그 다음 foreach문을 사용해 ages에 있는 숫자들을 age안에 저장한 후 반복하게 만들었고 만약 age가 18보다 크거나 같다면 age를 출력하도록 만들었다.
그럼 18보다 크거나 같은 숫자들이 출력되는 것을 확인해 볼 수 있다.
다음과 같은 이름 그룹이 있을 때 J로 시작하는 사람들만 출력하라.
John Doe, Jane Doe, Mary Doe, Steve Jobs
public static void main(String[] args) {
String[] names = {"John Doe", "Jane Doe",
"Mary Doe", "Steve Jobs"};
for (String name : names) {
if (name.charAt(0) == 'J') {
System.out.println(name);
}
}
}
}
String[]을 통해 배열을 만들어주고 names에 저장하였다.
그런 다음 foreach문으로 names안에 있는 name을 반복하라는 명령을 내렸고 charAt(0)을 사용해 name의 첫 번째 문자(0번째 인덱스)가 J일 경우에만 name을 출력하도록 코드를 작성하였다.
정수 배열 (10, 20, 30, 40, 50)이 있을 때 반복문을 활용해 요소들을 거꾸로 출력하라.
public class Main {
public static void main(String[] args) {
int arr[] = {10, 20, 30, 40, 50};
// arr.length - 1 = 마지막 요소의 인덱스
for (int i = arr.length -1; i >= 0; i--) {
System.out.println(arr[i]);
}
}
}
int arr[]로 배열을 만든 후 {}안에 있는 값을 저장해주었다.
그 뒤 for문을 사용해 배열의 마지막 인덱스부터 첫번째 인덱스까지 반복하도록 작성해주었다.
arr.length -1은 배열의 마지막 인덱스를 의미한다.
배열의 길이는 5이지만 인덱스는 0부터 시작하기 때문에 마지막 인덱스는 4가 된다.
따라서 i를 마지막 인덱스부터 시작하게 만든 뒤, i--를 사용해 반복할 때마다 인덱스를 1씩 감소시키도록 하였다.
그 뒤 print를 통해 현재 인덱스의 값을 출력하였다.
그 결과 배열들의 요소들이 뒤에서부터 순서대로 출력되는 것을 확인할 수가 있다.
배열을 입력하면 각 요소를 10배 키우는 함수를 정의하라.
public class Main {
static void arry10x(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i] *= 10;
}
}
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
arry10x(arr);
for (int item : arr) {
System.out.println(item);
}
}
}
int[]를 사용해 정수형 배열을 매개변수로 받는 arry10x 함수를 정의하였다.
함수 내부에서는 for 문을 사용해 배열의 처음부터 끝까지 반복하도록 하였다.
arr[i] *= 10;은 현재 배열 요소의 값을 10배로 변경한다는 뜻이다.
main 메서드안에 int[]arr 배열을 생성한 뒤 arry10x(arr);를 호출해 배열의 값을 모두 10배로 바꾸었다.
그 후 foreach문을 활용해 변경된 배열 요소를 하나씩 출력하였다.
아래와 같이 파일의 확장자를 추출하는 함수를 정의하라.
myphotho.jpg -> jpg
data.csv -> csv
public class Main {
static String getExtension(String filleName) {
// lastIndexOf(문자) - 입력받은 문자의 인덱스를 반환합니다
// 문자가 여러개 있는 경우 그 중 마지막 문자의 인덱스를 반환
return filleName.substring
(filleName.lastIndexOf ('.') + 1);
}
public static void main(String[] args) {
System.out.println(getExtension("me.jpg"));
System.out.println(getExtension("data.csv"));
System.out.println(getExtension("view.pdf"));
}
}
getExtension이라는 함수를 생성하고 문자열(String) 타입의 filleName 매개변수를 선언하였다.
이 함수는 파일 이름을 입력받아 확장자만 추출하는 역할을 한다.
그 다음 filleName.lastIndexof('.')를 사용해 파일 이름에서 마지막 .의 위치를 찾도록 작성하였다.
그럼 me.jpg에서는 .의 위치가 2가 된다.
그 다음 substring() 메서드를 이용해 . 다음 문자부터 끝까지 잘라내도록 만들었다.
아이디가 다음 규칙을 지켰는지 검사하는 함수를 정의하라.
영어 소문자, 숫자, _(언더스코어), .(점)만 가능합니다.
5글자 이상 20글자 이하
public class Main {
// 아이디 유효성 검사하는 함수
static boolean isValidUserName(String username) {
// 표현식 (Experssion)
// 정규식 (Regular Experession) = 패턴
String pattern = "^[a-z0-9_.]{5,20}$";
return username.matches(pattern);
}
public static void main(String[] args) {
System.out.println(isValidUserName("qwer_!"));
}
}
boolean을 사용해 아이디가 올바른지 검사하는 함수를 선언한다.
그 다음 문자열의 규칙을 검사하는 문법인 정규식을 사용하였다.
그 다음 username이 pattern의 규칙과 일치하는지 검사하도록 작성하였으며
마지막으로 return을 사용해 검사 결과를 반환하도록 만들었다.
그럼 결과는 true나 false 둘 중 하나만 나오게 된다.
입력된 단어가 아래의 정의된 나쁜 말들을 포함하는지 확인하는 함수를 정의해라.
바보, 똥개, 말미잘
public class Main {
// 나쁜말 검사하는 함수
static boolean hasBadwords(String text) {
String[] badwords = {"바보", "똥개", "말미잘"};
for (String badword : badwords) {
if (text.indexOf(badword) >= 0) {
return true;
}
}
return false;
}
public static void main(String[] args) {
System.out.println(hasBadwords("너는 바보야"));
System.out.println(hasBadwords("너는 천재야"));
System.out.println(hasBadwords("너는 말미잘이야"));
}
}
boolean을 통해 문장에 나쁜말이 있는지 참, 거짓으로 분류하도록 하였다.
그 뒤 문자열 배열(String [])을 사용해 나쁜 말 목록을 저장하였다.
그럼 배열 안에는 바보, 똥개, 말미잘이 저장된다.
foreach 문을 통해 badwords 배열 안의 단어를 하나씩 꺼내 반복하게 하였다.
반복 순서는 바보, 똥개, 말미잘로 차례대로 진행된다.
text.indexOf(badword)는 text 안에 badword가 있는지를 찾게 해준다.
문자열이 있으면 위치를 반환하고 문자열이 없으면 -1을 반환한다.
if문을 사용해 badword가 text 안에 존재한다면 0 이상의 숫자를 반환하고 없다면 -1을 반환한다는 것이다.
나쁜 말을 발견했으니 즉시 true 반환 후 함수를 종료하고
끝까지 검사했는데 나쁜 말이 없다면 false를 반환하라는 말이다.
main에서 출력해보면 true false true 라고 출력되는 것이 확인된다.
배열에서 최소값을 찾는 로직을 작성하라.
public class Main {
public static void main(String[] args) {
int[] arr = {23, 15, 39, 21, 18, 54, 36, 13, 17};
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
System.out.println(min);
}
}
int[] arr = 를 통해 정수 배열을 생성하고 여러 숫자를 저장하였다.
그 다음 int min = arr[0];로 배열의 첫번째 값을 최소값(min)이라고 가정하고 시작하였다.
즉 처음에는 min이 23이 된다.
그 다음 반복문을 사용해 배열의 처음부터 끝까지 반복하며 모든 값을 검사하게 하였다.
만약 현재 배열 값이 min보다 작으면 min = arr[i];로 최소값을 새로 저장하게 만들었다.
그럼 min을 출력했을 때 반복문으로 가장 배열 안의 숫자들을 비교하며 가장 작은 값을 min안에 입력해 13이 출력되게 된다.
오늘은 배열과 반복문, 문자열 처리, 그리고 함수에 대해 예제 문제를 풀어보는 시간을 가져보았다.
배열 안의 값을 반복문으로 하나씩 꺼내 출력해보면서 for문과 foreach문의 사용 방법을 익힐 수 있었다.
또한 조건문과 함께 사용하여 최소값을 찾는 연습도 해보았다.
문자열에서는 split()과 indexOf()를 활용해 문자열을 나누거나 특정 단어를 찾는 방법을 배웠다.
특히 나쁜말 검사기를 만들며 문자열 메서드의 활용방법을 이해할 수 있게 되었다.
아직 어려운 부분도 있고 문법을 모두 외우지 못해 버벅거리며 전에 썼던 코드들을 찾아보는 어려움이 있었다.
하지만 직접 코드를 작성하고 수정해보면서 점점 흐름을 이해하게 되었고 프로그래밍의 재미도 느낄 수 있었던 하루였다.