• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

안녕하세요 퀴즈6질문 입니다..!

23.05.20 00:54 작성 23.05.20 00:57 수정 조회수 315

0

 학원 , 인강, 여러군데 2주정도 떠돌다가 무료강의 다보고 이해가 다른곳 보다 더 잘되는거 같아 결제했습니다. 먼저 좋은강의 감사해요..질문은 일단 힌트가 있는지 모르고 멋대로 풀다보니 엉망인거 같지만 답이 나오긴했습니다...풀이를 보고 나서야 완전히 다르다는걸 알았지만요...스크린샷 2023-05-20 005105.pngfor문 이해도가 낮아서 for문을 생각을 못한거 같네요이렇게 하면 안되는 거겠죠...?뭔가 제가 하드코딩을 하고 있는 걸까요..

답변 2

·

답변을 작성해보세요.

0

윤효길님의 프로필

윤효길

2023.07.05

아니 그래도 대단하시네요. 앞에서 배운 Replace를 활용해서 작성하신것보니 상상도 못했는데.. 이정도로 풀이를 했다는것은 for문 활용하는것도 충분히 하실것같습니다... 저는 진짜 어떻게 풀이해야할지 감이 안와서 곰곰히 생각하다가 그냥 나코딩 선생님의 풀이를 봐버렸는데..

0

안녕하세요?

우선 퀴즈에서 원한 것과 동일한 형태의 결과가 나오는 프로그램을 작성하셨기 때문에 충분히 잘하셨습니다. 특히 주민등록번호나 전화번호(스마트폰)와 같이 정해진 자릿수가 있는 경우에는 작성하신 것처럼 하드코딩이 필요할 수도 있습니다. 하지만 만약 교육기관의 퀴즈였다면, 그리고 실제 평가가 이루어진다면 퀴즈에서 요청한 getHiddenData() 메소드를 완성하지 않으셨기 때문에 감점 요인이 발생할 수 있습니다.

그러나 가장 중요한 것은 바로 이름인데요. 퀴즈에서는 한 가지 예시만 들었지만 사람의 이름은 보통 3글자로 이루어지지만 때로는 2글자, 4글자, 또는 그 이상이 될 수도 있어요.

만약 "김코" 라는 사람의 개인 정보였다면 어떻게 되었을까요?

public static void main(String[] args) {
	// 이름 2글자
	String myinfo = info("김코\n", "010507-1234567\n", "010-1234-5678");
	System.out.println(myinfo);
	myinfo = myinfo.replaceAll(myinfo.substring(1, 3), "**");
	myinfo = myinfo.replaceAll(myinfo.substring(12, 18), "******");
	myinfo = myinfo.replaceAll(myinfo.substring(28, 32), "****");
	System.out.println(myinfo);
}

다음과 같이 에러가 발생해버립니다. myinfo 에 들어가는 총 글자수가 짧아졌기 때문에 마지막 substring 에서 문제가 발생한것이죠.

김코
010507-1234567
010-1234-5678

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 32
	at java.lang.String.substring(String.java:1963)
	at Sample.main(Sample.java:12)

 

이번에는 "김코딩짱" 이라는 사람의 개인 정보였다면 어떻게 되었을까요?

public static void main(String[] args) {
	// 이름 4글자
	String myinfo = info("김코딩짱\n", "010507-1234567\n", "010-1234-5678");
	System.out.println(myinfo);
	myinfo = myinfo.replaceAll(myinfo.substring(1, 3), "**");
	myinfo = myinfo.replaceAll(myinfo.substring(12, 18), "******");
	myinfo = myinfo.replaceAll(myinfo.substring(28, 32), "****");
	System.out.println(myinfo);
}

보시는 것처럼 이름의 일부만 가려지고 주민등록번호, 전화번호도 비공개 처리가 올바로 되지 않은 것을 확인할 수 있습니다.

김코딩짱
010507-1234567
010-1234-5678
김**짱
010507-******7
010-1234****8

이번 장은 메소드를 배우기 위한 단원이었기 때문에 해설을 보신 뒤에 다시 한 번 처음부터 작성하며 연습해보시면 도움될 것 같아요 😊 그리고 프로그래밍에 있어서 문제 해결을 위한 방법은 한 가지만 있는 것은 아니므로 다양한 시도를 해보는 것은 정말 좋은 경험입니다. 그러면서 겪는 시행착오가 초보자분들을 더욱 단단하게 만들어줄 거에요.

감사합니다.