최코딩의 개발

[백준 1283번] 단축키 지정 본문

코딩테스트/백준

[백준 1283번] 단축키 지정

seung_ho_choi.s 2025. 1. 27. 22:22
728x90

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

 

N = gets.chomp.to_i
list = []
alphabet = Array.new(26, false)

# 입력 받으면서 해결
for start in 0..N - 1
  str = gets.chomp.to_s
  flag = false
  splitFlag = false
  bigStr = false
  # 공백 구분
  str_split = str.split(' ')

  # 첫글자 공략 공백 돌기
  for i in 0..str_split.length - 1
    if !splitFlag
      resultStr = ""
      # 첫글자 있는지 확인
      strSplit = str_split[i]
      if strSplit[0] >= 'A' && strSplit[0] <= 'Z'
        splitOrd = strSplit[0].ord - 65
      else
        splitOrd = strSplit[0].upcase.ord - 65
      end

      if !alphabet[splitOrd]
        strSplit[0] = "[" + strSplit[0] + "]"
        splitFlag = true
        flag = true
        alphabet[splitOrd] = true
        # 합쳐서 넣기
        for k in 0...str_split.length
          if k == i
            resultStr += strSplit
          else
            resultStr += str_split[k]
          end
          resultStr += " "
        end
        list.push(resultStr.strip)
      end

    end
  end

  # 뒷글자 공략
  if !splitFlag
    splitFlag2 = false
    for i in 0..str_split.length - 1
      if !splitFlag2
        resultStr = ""
        # 뒷글자 있는지 확인

        for j in 1...str_split[i].length
          strSplit = str_split[i]
          if strSplit[j] >= 'a' && strSplit[j] <= 'z'
            splitOrd = strSplit[j].upcase.ord - 65
          else
            splitOrd = strSplit[j].ord - 65
          end

          if !alphabet[splitOrd]

            flag = true
            alphabet[splitOrd] = true
            strSplit[j] = "[" + strSplit[j] + "]"
            splitFlag2 = true

            # 합쳐서 넣기
            for k in 0...str_split.length
              if k == i
                resultStr += strSplit
              else
                resultStr += str_split[k]
              end
              resultStr += " "
            end
            list.push(resultStr.strip)
            break
          end
        end
      end
    end
  end

  if !flag
    list.push(str)
  end
end

for k in 0...list.length
  puts list[k]
end

 

 

하... 진짜 이 문제 너무 이상하다. 문제 설명이 너무 빈약해서 풀 때 정말 어려웠다. 결국 2~3시간이나 걸려버렸다...

핵심은 첫 글자가 단축키로 이미 지정됐는지 확인하고, 만약 되어 있다면 그다음 알파벳을 단축키로 지정하면 되는 거였다. 여기서 띄어쓰기도 고려해야 했고, 단어 단위로 생각해야 해서 복잡했다.

게다가 Ruby가 Java와는 다르게 ASCII 코드 처리문자열 메서드가 다른 부분이 많아서 익숙하지 않아 애를 먹었다. 그래도 끝까지 해결하긴 했다! 😤

728x90