갱스타
갱스타의 블로그
갱스타
전체 방문자
오늘
어제
  • 분류 전체보기 (93)
    • TIL(Today I Learned) (10)
    • 노력만이 살길! (58)
      • 알고리즘 (29)
      • 네트워크 (3)
      • Python (1)
      • Spring Boot (1)
      • 합격하기 (0)
      • Adsp (3)
      • SQLD (10)
      • 데이터분석 (5)
      • 취업일기 (4)
      • IT 프로젝트 관리 (1)
      • 운영체제 (1)
    • Life (10)
      • 일상 그리고 리뷰 (10)
    • 기타 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 싸피
  • 알고리즘
  • 달팽이 반복문
  • 싸피합격
  • 싸피7기
  • 네트워크
  • SW Expert Academy
  • SWEA 13038
  • 달팽이문제
  • 백준
  • mac 단축키
  • java 알고리즘
  • 통신
  • post
  • Get
  • 백준 참외밭
  • 백준 달팽이
  • 백준 2477번
  • swea
  • 백준 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갱스타

갱스타의 블로그

노력만이 살길!/알고리즘

백준 2999번 비밀이메일

2022. 3. 1. 02:25

https://www.acmicpc.net/problem/2999

 

2999번: 비밀 이메일

정인이는 원래 "bombonisuuladici"를 보내려고 했다. 이 메시지는 16글자이므로, 정인이는 1*16, 2*8, 4*4 행렬을 선택할 수 있다. R이 가장 큰 것은 4*4이므로, 4*4를 선택한다. 정인이가 만든 행렬은 다음과

www.acmicpc.net

문제

매일 밤, 정인이는 상근이에게 이메일을 보낸다. 정인이는 자신의 이메일이 해킹당할 수도 있다는 생각에, 내용을 항상 암호화해서 보낸다.

정인이가 사용하는 암호 알고리즘은 다음과 같다. 정인이가 보내는 메시지는 총 N글자이다.

먼저, 정인이는 R<=C이고, R*C=N인 R과 C를 고른다. 만약, 그러한 경우가 여러 개일 경우, R이 큰 값을 선택한다.

그 다음, 행이 R개고, 열이 C개인 행렬을 만든다.

이제 메시지를 행렬에 옮긴다. 첫 번째 행의 첫 번째 열부터 C번째 열까지 메시지를 순서대로 옮긴 뒤, 남은 메시지는 두 번째 행, 세 번째 행,... R번째 행에 첫 번째 행을 채운 방법과 동일한 순서대로 옮긴다.

행렬에 모두 메시지를 옮겼다면, 이 것을 첫 번째 열의 첫 번째 행부터 R번째 행까지 차례대로 읽으면서 다시 받아 적는다. 그 다음에, 두 번째 열, 세 번째 열,..., C번째 열에 쓰여 있는 문자를 첫 번째 열을 읽은 방법과 동일하게 받아적는다.

상근이는 매일 밤 정인이의 메시지를 해독하는데 지쳤다. 정인이의 암호 이메일이 주어졌을 때, 이를 해독하는 프로그램을 작성하시오.

입력

첫째 줄에 상근이가 받은 메시지가 주어진다. 이 메시지는 알파벳 소문자로만 이루어져 있고, 최대 100글자이다.

출력

첫째 줄에 상근이가 받은 메시지를 해독한 메시지를 출력한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

//https://www.acmicpc.net/problem/2999
public class Main{
    public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
              StringTokenizer st = new StringTokenizer(br.readLine());
              String line=st.nextToken();
              int length=line.length();
              int R=0;
        for (int i = 1; i <length ; i++) {
            if(length%i==0){
                int quotient=length/i;
                if(i>quotient) break;
                R=i;
            }
        }
        int C=length/R;
        char[][] arr=new char[R][C];
        int cnt=0;
        for (int i = 0; i <C; i++) {
            for (int j = 0; j < R; j++) {
                arr[j][i]=line.charAt(cnt++);
            }
        }
        for (int i = 0; i < R; i++) {
            for (int j = 0; j < C; j++) {
                System.out.print(arr[i][j]);
            }
        }
        System.out.println();



    }
}

'노력만이 살길! > 알고리즘' 카테고리의 다른 글

백준 1074 Z탐색  (0) 2022.03.01
백준 4485번 녹색 옷 입은 애가 젤다지?  (0) 2022.03.01
[SWEA][JAVA] 13038 교환학생  (0) 2022.03.01
[SWEA][JAVA] 2005 파스칼의 삼각형  (0) 2022.03.01
[SWEA][JAVA] 1234 비밀번호  (0) 2022.03.01
    '노력만이 살길!/알고리즘' 카테고리의 다른 글
    • 백준 1074 Z탐색
    • 백준 4485번 녹색 옷 입은 애가 젤다지?
    • [SWEA][JAVA] 13038 교환학생
    • [SWEA][JAVA] 2005 파스칼의 삼각형
    갱스타
    갱스타
    열심히 배워보자

    티스토리툴바