[Kotlin] 백준 - 비밀 이메일

2024. 9. 7. 15:24· Coding Test
반응형

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

[문제]

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

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

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

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

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

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

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

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

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

 

[입출력 예]

 

[풀이]

문자열의 길이가 주어지면 R x C으로 구성되는 경우의 수를 모두 구하여 R이 가장 큰 경우를 선택하고, 그에 맞게 행렬을 구성하면 되는 문제입니다.

var R = 0
for (i in 1 until length) {
    if (length % i == 0) {
        val quotient = length / i
        if (i > quotient) break
        R = i
    }
}

먼저 R을 구해줍니다. 약수로 나누면서 가장 큰 경우의 값을 찾아줍니다.

 

val C = length / R
val arr = Array(R) { CharArray(C) }
var cnt = 0
for (i in 0 until C) {
    for (j in 0 until R) {
        arr[j][i] = line[cnt++]
    }
}
for (i in 0 until R) {
    for (j in 0 until C) {
        print(arr[i][j])
    }
}

첫 번째 이중 반복문에서 입출력에 나온 순서대로 (세로 방향 우선) 행렬을 구성해 줍니다. 

두 번째 이중 반복문에서는 구성된 행렬에서 가로 방향 우선으로 문자열을 출력하면 됩니다.

반응형
저작자표시 (새창열림)
'Coding Test' 카테고리의 다른 글
  • [Kotlin] 백준 2493번 : 탑
  • [Kotlin] 백준 - 1475번 방번호
  • [Kotlin] 백준 - 중복 빼고 정렬하기
  • [Kotlin] 99 클럽 코딩 테스트 스터디 미들러 40일차 - UniquePaths
SeungYong.Lee
SeungYong.Lee
반응형
SeungYong.Lee
Win-Dev
SeungYong.Lee
전체
오늘
어제
  • All (237) N
    • Development (137) N
      • Android (133) N
      • iOS (0)
      • Flutter (4)
      • Backend (0)
    • Algorithm (5)
    • Knowledge (5)
      • IT (2)
      • Science (0)
      • ETC & Tip (3)
    • Today I Learn (28)
    • Coding Test (62)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 안녕하세요. 반갑습니다 :)

인기 글

태그

  • Java
  • Flutter
  • Android
  • 코틀린
  • hilt
  • 프로그래머스
  • Collection
  • exception
  • Retrofit
  • 코딩테스트
  • Imageview
  • Animation
  • Widget
  • compose
  • HTTP
  • coroutine
  • 비동기처리
  • dfs
  • Kotlin
  • glance

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
SeungYong.Lee
[Kotlin] 백준 - 비밀 이메일
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.