[JAVA] 33. String Import (문제)

편준민's avatar
Feb 17, 2025
[JAVA] 33. String Import (문제)

문제

전화번호의 지역 번호를 보고 부산에 사는 고객의 수를 구하기

문제 분석

  • String nums에 들어있는 데이터를 사용할 수 있도록 변경 (Parsing)
  • 지역번호를 확인하여 부산 사람인지 확인하기

1. 절차를 쪼개서 하나씩 풀기

String nums에 들어있는 데이터를 “,”를 기준으로 하여 splitNums[]배열에 하나씩 집어넣기
※ for 문을 사용하여 한 번에 집어 넣을 수 있지만 하나씩 확인해보기 (2가지 정도만 확인함)
package ex08; public class Str02 { public static void main(String[] args) { String nums = """ 031)533-2112, 02)223-2234, 02)293-4444, 051)398-3434, 02)498-3434, 051)398-3434, 043)3222-3434 """; // 부산에 사는 고객은 몇명인가요? // 1. split(,)로 String[] splitNums[]로 옮기기 String[] splitNums = nums.split(","); System.out.println(splitNums[0]); System.out.println(splitNums[1]); System.out.println(splitNums[1].length()); System.out.println(splitNums.length); } }
notion image
031)533-2112 의 길이 12 = O
02)223-2234 의 길이 11 = X (길이가 1개가 추가가 되었다)
현재 splitNums의 배열의 크기 7 = O
 
※먼가 결과창의 띄워쓰기가 있다. 2번째 배열에 들어갈 떄에 \n(한줄 띄기)가 들어간 것 같으므로 split(,)를 split(,\n)으로 고쳐보기

2. 위 문제점 수정 후 실행

package ex08; public class Str02 { public static void main(String[] args) { String nums = """ 031)533-2112, 02)223-2234, 02)293-4444, 051)398-3434, 02)498-3434, 051)398-3434, 043)3222-3434 """; // 부산에 사는 고객은 몇명인가요? // 1. split(,)로 String[] splitNums[]로 옮기기 String[] splitNums = nums.split(",\n"); System.out.println(splitNums[0]); System.out.println(splitNums[0].length()); System.out.println(splitNums[1]); System.out.println(splitNums[1].length()); System.out.println(splitNums.length); } }
문제점 해결 완료!
문제점 해결 완료!

3. splitNums[] 배열의 “)” 번지수 찾고 “)” 앞에 지역번수 출력

package ex08; public class Str02 { public static void main(String[] args) { String nums = """ 031)533-2112, 02)223-2234, 02)293-4444, 051)398-3434, 02)498-3434, 051)398-3434, 043)3222-3434 """; // 부산에 사는 고객은 몇명인가요? // 1. split(,)로 String[] splitNums[]로 옮기기 - pasing String[] splitNums = nums.split(",\n"); //2. indexOf 이용하여 ")"의 주소를 찾기 // substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장 System.out.println(splitNums[0].indexOf(")")); // 3번지에 ")" 가 있음 System.out.println(splitNums[1].indexOf(")")); // 2번지에 ")" 가 있음 System.out.println(splitNums[0].substring(0, splitNums[0].indexOf(")"))); System.out.println(splitNums[1].substring(0, splitNums[1].indexOf(")"))); //3. 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력 } }
notion image

4. 지역번수를 따로 저장하기

package ex08; public class Str02 { public static void main(String[] args) { String nums = """ 031)533-2112, 02)223-2234, 02)293-4444, 051)398-3434, 02)498-3434, 051)398-3434, 043)3222-3434 """; // 부산에 사는 고객은 몇명인가요? // 1. split(,)로 String[] splitNums[]로 옮기기 - pasing String[] splitNums = nums.split(",\n"); //2. indexOf 이용하여 ")"의 주소를 찾기 // substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장 /*System.out.println(splitNums[0].indexOf(")")); // 3번지에 ")" 가 있음 System.out.println(splitNums[1].indexOf(")")); // 2번지에 ")" 가 있음 System.out.println(splitNums[0].substring(0, splitNums[0].indexOf(")"))); System.out.println(splitNums[1].substring(0, splitNums[1].indexOf(")")));*/ String newNums = splitNums[0].substring(0, splitNums[0].indexOf(")")); String newNums1 = splitNums[1].substring(0, splitNums[1].indexOf(")")); System.out.println(newNums); System.out.println(newNums1); //3. 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력 } }
notion image

5. 모든 배열을 확인하여 051인 지역번호가 있으면 count가 1 증가 하도록 만들기

package ex08; import java.sql.SQLOutput; public class Str02 { public static void main(String[] args) { String nums = """ 031)533-2112, 02)223-2234, 02)293-4444, 051)398-3434, 02)498-3434, 051)398-3434, 043)3222-3434 """; // 부산에 사는 고객은 몇명인가요? // 1. split(,)로 String[] splitNums[]로 옮기기 - pasing String[] splitNums = nums.split(",\n"); //2. indexOf 이용하여 ")"의 주소를 찾기 // substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장 /*System.out.println(splitNums[0].indexOf(")")); // 3번지에 ")" 가 있음 System.out.println(splitNums[1].indexOf(")")); // 2번지에 ")" 가 있음 System.out.println(splitNums[0].substring(0, splitNums[0].indexOf(")"))); System.out.println(splitNums[1].substring(0, splitNums[1].indexOf(")")));*/ String newNums = splitNums[0].substring(0, splitNums[0].indexOf(")")); String newNums1 = splitNums[1].substring(0, splitNums[1].indexOf(")")); String newNums2 = splitNums[2].substring(0, splitNums[2].indexOf(")")); String newNums3 = splitNums[3].substring(0, splitNums[3].indexOf(")")); String newNums4 = splitNums[4].substring(0, splitNums[4].indexOf(")")); String newNums5 = splitNums[5].substring(0, splitNums[5].indexOf(")")); String newNums6 = splitNums[6].substring(0, splitNums[6].indexOf(")")); //3.contains를 이용해 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력 int count = 0; if (newNums.contains("051") == true) { count++; } System.out.println(count); if (newNums3.contains("051") == true) { count++; } System.out.println(count); } }
notion image
조건문이 변수에 들어가 있는 수가 “051”과 같으면 count가 1 올라간다.
newNums = 031 이기 때문에 count가 0
newNums3 = 051이기 때문에 count가 1 증가한 결과이다.

6. newNum[]을 만들어 splitNums[]에 있는 배열을 하나 하나 옮기고 for문으로 공통모듈 감싸기

package ex08; import java.sql.SQLOutput; public class Str02 { public static void main(String[] args) { String nums = """ 031)533-2112, 02)223-2234, 02)293-4444, 051)398-3434, 02)498-3434, 051)398-3434, 043)3222-3434 """; // 부산에 사는 고객은 몇명인가요? // 1. split(,)로 String[] splitNums[]로 옮기기 - pasing String[] splitNums = nums.split(",\n"); //2. indexOf 이용하여 ")"의 주소를 찾기 // substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장 /*System.out.println(splitNums[0].indexOf(")")); // 3번지에 ")" 가 있음 System.out.println(splitNums[1].indexOf(")")); // 2번지에 ")" 가 있음 System.out.println(splitNums[0].substring(0, splitNums[0].indexOf(")"))); System.out.println(splitNums[1].substring(0, splitNums[1].indexOf(")")));*/ // newNums 배열을 만들어 splitNum의 배열을 newNums에 옮기기 String[] newNums = new String[7]; for (int i = 0; i < newNums.length; i++) { newNums[i] = splitNums[i].substring(0, splitNums[i].indexOf(")")); } int count = 0; //3.contains를 이용해 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력 for (int i = 0; i < splitNums.length; i++) { if (newNums[i].contains("051") == true) { count++; } } System.out.println("부산에 사는 사람은 " + count + "명 입니다"); } }
notion image

코드 최적화 (실패 / 아래의 이유 확인)

newNums[]에 다시 옮기지 말고 splitNums를 그대로 사용해도 될 것 같음. 그래서 splitNums를 for문으로 돌렸다.
package ex08; import java.sql.SQLOutput; public class Str02 { public static void main(String[] args) { String nums = """ 031)533-2112, 02)223-2234, 02)293-4444, 051)398-3434, 02)498-3434, 051)398-3434, 043)3222-3434 """; // 부산에 사는 고객은 몇명인가요? // 1. split(,)로 String[] splitNums[]로 옮기기 - pasing String[] splitNums = nums.split(",\n"); //2. indexOf 이용하여 ")"의 주소를 찾기 // substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장 //3.contains를 이용해 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력 int count = 0; for (int i = 0; i < splitNums.length; i++) { if (splitNums[i].contains("051") == true) { count++; } } System.out.println("부산에 사는 사람은 " + count + "명 입니다"); } }
결과가 똑같이 나온다.
결과가 똑같이 나온다.
문제점 발견
043)3222-051 인 사람도 포함 시켜서 count수를 1 올림 (지역번호 외에도 051이 들어가면 count + 1 한다.)
 
  • newNum에 옮기지 않고는 안되는 것 같다. 왜냐하면 splitNums에는 031)533-2112 전체가 들어가 있는 것이고 newNum은 “)” 앞에 있는 번호만 잘라서 newNum에 넣은 것 이기 때문이다. 따라서 splitNums를 사용하면 031)533-0512라는 번호도 051이 포함 되어 있기 때문에 count가 1 올라가서 올바르지 못한 코드이다.
 
Share article

YunSeolAn