프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/12918)
자바 + 초급문제 의 문자열다루기 기본이다.
내용: 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.
참 어렵게 돌아가서 5h 정도 삽질했다. 어디서 삽질했는지는 주석에 달려있으므로 처음 본 함수를 적어두자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package 문자열다루기기본; import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in);//입력 값을 받기위해 Scanner 클래스를 부르고 sc로 선언. boolean output = true; // 트루를 갖는 변수 output을 선언. String write; //문자열 클래스 write를 선언. char b = 0; // check 변수의 값을 받기위한 변수 char를 선언. System.out.println("본 프로그램은 문자열의 수가 4이거나 6인지 " + "그리고 숫자로만 구성되어있는지 확인합니다." + '\n' +"1~8자까지 입력해주세요. ");// 사용자의 편의를 위해 안내 제시. write = sc.nextLine();//문자열 클래스 write를 sc의 입력 문자열로 선언. String a = write; //a 라는 문자열 변수를 선언한뒤 write로 대입. int length =a.length(); /*a를 길이를 쉽게 측정하기위해 int 변수 length 선언 및 a의 입력값 즉 write의 입력 값의 문자열의 수를 측정하기 위해 length 함수 사용*/ System.out.println('\n' + "입력하신 문자열의 수 =" + "\t" + length + '\n'); /*사용자가 자신의 입력한 문자열의 수를 알고 파악할 수 있게끔 입력값의 문자열을 출력*/ if((a.length() == 4) || (a.length() ==6) ) {//a의 길이를 4이거나 6일경우 를 설정 for( int check = 0; check < a.length(); check++ ) { /*반복문을 만들고 인트형 변수 check의 초기값을 0으로 지정 * 변수 check가 a의 문자열의 길이가 check 값보다 클때까지 반복문이 진행되게끔함. */ b = write.charAt(check); /*char 형 변수 b에 입력값 write 의 check 문자를 대입. * write의 문자에 check 과정에서의 추출문자를 저장시킴(charAt)*/ if( (Character.isDigit(b) == false) ) { //변수 b에 대입되는 문자열이 숫자인지 문자인지에 따라 true false를 나타내는 변수 캐릭터와 isDigit 설정. output = false;// b의 검사값이 false 일 경우 output이 false가 되게끔 설정. } } }else { output =false; //for 문의 4 혹은 6 로직에 맞지 않으면 사전에 output을 false 되게끔 설정. } System.out.println(output); //모든 로직이 종료되면 output을 출력. } } | cs |
1. 입력 값을 받는 클래스를 몰라 Scanner라는 클래스를 알아냈다.
/* 선언하면 import java.util.Scanner; 로 호출 되면 자바의 유틸에서 스캐너를 호출한 것으로 보인다.
Scanner 타입에 sc라는 변수를 지정했으며 대입 값으로 newScanner(System.in); 으로 초기화 및 입력 값을 받은 것으로 보인다.*/
2. String 타입 변수 write 에 sc.nextLine();을 대입
// 이게 뭐냐...입력값 sc에 .nextLine()은 엔터를 치기 전까지의 입력 값을 받는다 .next()는 스페이스바를 치기 전까지의 입력 값 을 구분한다.
3. int 변수 length 에 a.length();를 대입
//길이는 정수 값이므로 int타입이며 a.length() 에서 .length() 는 입력받은 문자열의 길이를 구해준다.
4. || = or , && = and
5.Character.isDigit(b) == false
/* 괄호 안의 값이 문자인지 숫자인지 판단하는 boolean 타입 매써드 is.Digit() 즉 true 나 false로 결과 값이 나온다.
char의 값을 객채로 삼는 클래스인 Character
그러므로 Charater.isDigit()*/
다분히 일차원 적이고 비효율적인 방법으로 접근한 것 같다. 또 해보며 겪어봐야겠다.
'자바 초급문제로 맨땅에 해딩하기' 카테고리의 다른 글
자바 초급문제 6. 문자열을 정수로 바꾸기 (0) | 2020.03.29 |
---|---|
자바 초급문제 5. 같은 숫자는 싫어 (0) | 2020.03.27 |
자바 초급문제 4. 수박수박수박수박수박수? (0) | 2020.03.25 |
자바 초급문제 3. 서울에서 김서방 찾기 (0) | 2020.03.25 |
자바 초급문제 2. 완주하지 못한 선수 (0) | 2020.03.24 |