아스키ASCII 코드 ↔️ 문자열 치환 javascript

김민아·2022년 10월 21일
0
post-thumbnail

아스키코드에 관해서는 예전에 CRLF 문제 해결에서 잠깐 알아본 적이 있다.
백준 알고리즘 15829. 해시 문제를 풀면서 기록하기 위해 작성하게 되었다.
백준 알고리즘 2744. 대소문자 바꾸기도 아스키 코드로 변경하여 문제를 해결했다.

ASCII 코드는

ASCII (American Standard Code for Information Interchange, 미국 정보 교환 표준 부호)로 1963년 미국 ANSI에서 표준화한 정보교환용 7비트 부호체계이다. 000(0x00)부터 127(0x7F)까지 총 128개의 부호가 사용된다.

ASCII 코드 영숫자 테이블

10진수부호10진수부호10진수부호10진수부호
0320568080P104h
033!0579081Q105i
034"058:082R106j
035#059;083S107k
036$060<084T108l
037%061=085U109m
038&062>086V110n
039'063?087W111o
040(064@088X112p
041)065A089Y113q
042*066B090Z114r
043+067C091[115s
044,068D092\ 116t
045-069E093]117u
046.070F094^118v
047/071G095_119w
0480072H096`120x
0491073I097a121y
0502074J098b122z
0513075K099c123{
0524076L100d124|
0535077M101e125}
0546078N102f126~
0557079O103g

문자 → ASCII

let char = 'a'
char.charCodeAt() // 97

ASCII → 문자

let ascii = 98
String.fromCharCode(ascii) // 'b'

문제

15829. hashing

const path = __dirname + '/input_boj.txt'
// const path = '/dev/stdin'

const input = require('fs').readFileSync(path).toString().trim().split('\n')
let size = +input[0]
let array = input[1].split('')

function makeHash (arr) {
  // M과 r은 서로소인 숫자로 M은 1234567891,
  // r은 자릿수(항)마다 31을 거듭제곱한 수.
  let M = 1234567891
  let r = 1
  // 값을 누적해 최종적으로 반환할 해시 변수.
  let hash = 0

  for (let i = 0; i < size; i++) {
    // 아스키코드로 변환했을 때 a부터 1로 계산하기 위해 -96
    hash += (arr[i].charCodeAt() - 96) * r
    // 자리수마다 31을 거듭제곱하기 때문에 곱해줌.
    r *= 31
    // r이 M값을 넘지 않도록 나머지를 다시 저장 
    r %= M
    // 최종 hash 값 역시 M값을 넘지 않도록 나머지를 저장 
    hash %= M
  }

  return hash
}

console.log(makeHash(array))

2744. 대소문자 바꾸기

// 입력 > WrongAnswer
const path = __dirname + '/input_boj1.txt'
// const path = '/dev/stdin'

const input = require('fs').readFileSync(path).toString().trim().split('')

let answer = input.map(el => {
  if (el.charCodeAt() > 91) return el.toUpperCase()
  else return el.toLowerCase()
}).join('')

console.log(answer) // wRONGaNSWER

0개의 댓글