알고리즘

백준 JS | 2941번 크로아티아 알파벳

2022. 5. 16. 23:05
목차
  1. 문제
  2. 입력
  3. 출력
  4. 나의 답안 (오답)
  5. 다른 사람의 답안
  6. 개선해야할 사항
출처 : 백준 온라인저지
https://www.acmicpc.net/problem/2941
 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

 

문제

크로아티아 알파벳을 입력하기 위해 컴퓨터에서 입력가능하도록 크로아티아 알파벳을 변환해서 사용한다.

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. 목록에 없는 알파벳은 한 글자씩 센다.

입력

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

 

출력

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

 

나의 답안 (오답)

const input = require('fs').readFileSync('/dev/stdin').toString().trim();

// 입력값 복사
let arr = input;
const croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj','s=', 'z='];

// 알파벳 갯수 카운트
let count = 0;


for( let i = 0; i < arr.length; i++) {
  // 입력값 2개씩 만들어 알바벳과 비교
  const two = arr[i] + arr[i+1];
  
  // 복사한 입력값에서 크로아티아 알파벳 부분을 크로아티아 알파벳이라는 의미로 'C'로 치환
  if(croatia.indexOf(two) !== -1) {
    arr = arr.split(two).join('C');
    
    // 크로아티아 알파벳은 치환되고 남은 배열의 길이를 알파벳 갯수 카운트에 할당
    count = arr.length;
  }
}

// 만약 dz= 가 포함된 경우 d, z= 2개의 값으로 인정되므로
//  dz= 가 입력값에 포함된 경우는 1을 빼준다. 
if(input.indexOf('dz=') !== -1) {
  count = count - 1;
}

console.log(count);

일단 입력된 값에서 크로아티아 알파벳을 찾되, 2개로 이루어진 알파벳만 찾는다.

그리고, dz= 의 경우 하나의 알파벳임에도 d, z= 2개로 계산되기 대문에

입력값에 dz= 가 포함된 경우 count 를 1 줄여준다.

 

여기까지 코드를 입력하고 나면, 문제에서 제시된 입출력값은 모두 잘 통과된다. 

하지만, 어떤 이유에서인지 답안을 제출하면 오답으로 확인된다.

 

아무래도 예외케이스가 존재하는 모양인데 방법을 찾을 수 없었다. 

 

다른 사람의 답안

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim();

let croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='];

function solution(input) {
        for (let alphabet of croatia) {
                input = input.split(alphabet).join('a');
        }
        return input.length;
}

console.log(solution(input));

내가 확인한 케이스 중에 가장 깔끔하면서 나의 로직과 유사한 코드이다.

입력값을 개별로 계산하지 않고,  크로아티아 알파벳 배열을 활용해서 자동적으로 알파벳들은 문자열 'a'로 교체한 뒤에 입력값인 input 의  length를 출력한다. 

 

개선해야할 사항

문제만 보지않고 입력값과 출력값을 모두 보고 코드를 짜면서 예외사항에 대한 고민 없이 현재 사례들에 해당하는 예외처리만 진행하여 예외 케이스에 제대로 대응하지 못해 문제를 맞추지 못하는 것 같다. 앞으로 입출력 값은 되도록이면 로직을 모두 구현한 후에 테스트 시에만 확인할수 있도록 하자. 

'알고리즘' 카테고리의 다른 글

백준 JS | 2775번 부녀회장이 될테야  (0) 2022.05.26
백준 JS | 1316번 그룹단어 체커  (0) 2022.05.17
백준 JS | 4673번 셀프 넘버  (0) 2022.05.05
백준 온라인저지 100% 활용하기 ( vscode에서 nodejs 디버깅 모드 사용)  (1) 2022.05.02
백준 JS | 1110번 더하기 사이클  (0) 2022.04.26
  1. 문제
  2. 입력
  3. 출력
  4. 나의 답안 (오답)
  5. 다른 사람의 답안
  6. 개선해야할 사항
'알고리즘' 카테고리의 다른 글
  • 백준 JS | 2775번 부녀회장이 될테야
  • 백준 JS | 1316번 그룹단어 체커
  • 백준 JS | 4673번 셀프 넘버
  • 백준 온라인저지 100% 활용하기 ( vscode에서 nodejs 디버깅 모드 사용)
3jun
3jun
3jun
3jun
3jun
전체
오늘
어제
  • 분류 전체보기 (94)
    • 프로젝트 (5)
    • Web (9)
    • JavaScript (19)
    • React (12)
    • 알고리즘 (31)
    • Git (3)
    • AWS (3)
    • TypeScript (3)
    • CS (2)
    • Error (6)
    • 회고 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트
  • 유효성 로직
  • JavaScript
  • react
  • 백준 알고리즘
  • 백준 js
  • 프로그래머스 코테
  • this.props.history.push
  • 프로그래머스 코딩테스트 js
  • msw 에러
  • Promise
  • airbnb style guide
  • msw
  • 프로그래머스 js
  • 백준 온라인저지
  • outer environment
  • 백준 코테
  • 백준js
  • state
  • 프로그래머스 코딩테스트

최근 댓글

최근 글

hELLO · Designed By 정상우.
3jun
백준 JS | 2941번 크로아티아 알파벳
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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