UL :)
UL의 개발 블로그
UL :)
전체 방문자
오늘
어제
  • 분류 전체보기 (220)
    • 일상 (1)
    • 회고록 (7)
    • ChatGPT 아카이빙 (0)
    • PS(Java) (114)
      • 백준 (37)
      • 인프런 강의 문제 (77)
    • Web (69)
      • Spring (18)
      • JPA (7)
      • JSP (9)
      • HTML5 (12)
      • CSS (19)
      • HTTP (0)
      • 보안 (2)
    • Language (5)
      • Java (3)
      • JS (1)
      • Python (1)
    • Git, GitHub (4)
    • Settings (18)
      • IntelliJ (7)
      • Eclipse (2)
      • VSCode (3)
      • Android Studio (1)
      • VMware (2)
      • Mac (0)
    • Etc (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • produces
  • @GetMapping
  • @Id
  • 정렬
  • 영속성
  • HttpMessageConverter
  • JPA
  • 백준
  • argumentresolver
  • 1차 캐시
  • EntityManagerFactory
  • consumes
  • @Column
  • @PostMapping
  • 동일성보장
  • @ManyToOne
  • SEQUENCE 전략
  • ORM
  • ViewName반환
  • 엔티티 매핑
  • IDENTITY 전략
  • @JoinColumn
  • 영속성컨텍스트
  • ReturnValueHandler
  • @RequestParam
  • @Table
  • HandlerMethodArgumentResolver
  • BOJ
  • TABLE 전략
  • 요청헤더

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
UL :)

UL의 개발 블로그

PS(Java)/인프런 강의 문제

[PS] 인프런 강의 - 문자열 12. 암호

2022. 10. 15. 02:46

 

문제

현수는 영희에게 알파벳 대문자로 구성된 비밀편지를 매일 컴퓨터를 이용해 보냅니다.
비밀편지는 현수와 영희가 서로 약속한 암호로 구성되어 있습니다.
비밀편지는 알파벳 한 문자마다 # 또는 *이 일곱 개로 구성되어 있습니다.
만약 현수가 “#*****#”으로 구성된 문자를 보냈다면 영희는 현수와 약속한 규칙대로 다음과 같이 해석합니다.

 

1. “#*****#”를 일곱자리의 이진수로 바꿉니다. #은 이진수의 1로, *이진수의 0으로 변환합니다. 결과는 “1000001”로 변환됩니다.
2. 바뀐 2진수를 10진수화 합니다. “1000001”을 10진수화 하면 65가 됩니다.
3. 아스키 번호가 65문자로 변환합니다. 즉 아스크번호 65는 대문자 'A'입니다.

 

참고로 대문자들의 아스키 번호는 'A'는 65번, ‘B'는 66번, ’C'는 67번 등 차례대로 1씩 증가하여 ‘Z'는 90번입니다.
현수가 4개의 문자를 다음과 같이 신호로 보냈다면

 

#****###**#####**#####**##**

 

이 신호를 4개의 문자신호로 구분하면

 

#****## --> 'C'
#**#### --> 'O'
#**#### --> 'O'
#**##** --> 'L'

 

최종적으로 “COOL"로 해석됩니다.

 

현수가 보낸 신호를 해석해주는 프로그램을 작성해서 영희를 도와주세요.

 

▣ 입력설명
첫 줄에는 보낸 문자의 개수(10을 넘지 안습니다)가 입력된다. 다음 줄에는 문자의 개수의 일곱 배 만큼의 #또는 * 신호가 입력됩니다. 현수는 항상 대문자로 해석할 수 있는 신호를 보낸다고 가정합니다.

 

▣ 출력설명
영희가 해석한 문자열을 출력합니다.

 

▣ 입력예제 1
4
#****###**#####**#####**##**

 

▣ 출력예제 1
COOL

풀이

어느덧 문자열 마지막 문제다.

너무 피곤한데 한 문제라도 풀고자야겠다 싶어서 정신없이 대충 풀었더니...ㅋㅋㅋ 수식써가면서 어렵게 푼 것 같다...

강사님 풀이가 더 깔끔하고 간단하다. 체크한 문자는 잘라서 버려버리면 된다는 걸 생각못했다.... 이제 자야징..

 

코드

1) 내가 푼 방식

import java.util.Scanner;

public class Main {
 
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);

		//문자는 #또는*7개로 구성
		int n = in.nextInt(); //문자 개수
		String answer="";
		String s = in.next();
		
		for(int i=0; i<n; i++) { //28/4= 7
			int split = (s.length() / n) + (i * 7) - 1; //인덱스는 0부터니까 -1해준다
			String tmp = s.substring(split-6, split+1);//0~6, 7~13
			
			//이진수로변경(#=1, *=0)
			String binary = "";
			for(char c : tmp.toCharArray()) {
				if(c == '#') binary += '1';
				else if(c == '*') binary += '0';
			}
			
			//10진수로 변경
			int decimal = Integer.parseInt(binary, 2);
			
			//아스키코드 -> 문자로변경
			char c = (char)decimal;
			answer += c;
		}
		
		System.out.print(answer);
		
	}
}

 

2) 강사님 풀이

import java.util.Scanner;

public class Main {
 
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);

		//문자는 #또는*7개로 구성
		int n = in.nextInt(); //문자 개수
		String answer="";
		String s = in.next();
		
		for(int i=0; i<n; i++) { //28/4= 7
			//자른 후 이진수로 변경
			String tmp = s.substring(0, 7)
					.replace('#', '1')
					.replace('*', '0');
			
			//10진수로 변경
			int decimal = Integer.parseInt(tmp, 2);
			
			//아스키코드 -> 문자로변경
			char c = (char)decimal;
			
			answer += c;
			s = s.substring(7);
		}
		
		System.out.print(answer);
		
	}
}
저작자표시 비영리 변경금지 (새창열림)

'PS(Java) > 인프런 강의 문제' 카테고리의 다른 글

[PS] 인프런 강의 - Array 2. 보이는 학생  (0) 2022.10.15
[PS] 인프런 강의 - Array 1. 큰 수 출력하기  (0) 2022.10.15
[PS] 인프런 강의 - 문자열 11. 문자열 압축  (0) 2022.10.14
[PS] 인프런 강의 - 문자열 10. 가장 짧은 문자거리  (0) 2022.10.11
[PS] 인프런 강의 - 문자열 9. 숫자만 추출  (0) 2022.10.11
    'PS(Java)/인프런 강의 문제' 카테고리의 다른 글
    • [PS] 인프런 강의 - Array 2. 보이는 학생
    • [PS] 인프런 강의 - Array 1. 큰 수 출력하기
    • [PS] 인프런 강의 - 문자열 11. 문자열 압축
    • [PS] 인프런 강의 - 문자열 10. 가장 짧은 문자거리
    UL :)
    UL :)
    백엔드 개발자를 목표로 달리고 있습니다🔥

    티스토리툴바