대소문자 변환 JavaScript 풀이

2026.09.07·수정 2026.09.13·약 5분·작성: 해비·블로그 소개

먼저 직접 풀어보세요

문제 원문을 확인한 뒤 직접 풀이해 보세요. 해설과 정답은 아래 접힌 영역에서 확인할 수 있습니다.

목차

문제

길이가 100 이하인 대문자와 소문자가 섞인 문자열 한 줄이 주어집니다. 각 문자를 확인해 대문자는 소문자로, 소문자는 대문자로 바꾼 문자열을 출력해야 합니다.

입력은 문자열 한 줄이고, 출력은 모든 문자의 대소문자를 반대로 변환한 문자열 한 줄입니다.

예제 입력
StuDY

예제 출력
sTUdy

풀이와 정답

풀이와 정답 보기 (클릭)

대문자로 통일에서는 문자열 전체에 같은 규칙을 적용했습니다. 이번에는 문자마다 대소문자를 판별해 반대 형태로 바꿉니다.

Node.js 코딩 테스트에서는 표준 입력을 fs.readFileSync(0, "utf8")로 읽을 수 있습니다. 여기서는 한 줄 문자열을 다루므로 입력을 변수에 저장한 뒤 처리하며, trim()은 마지막 개행만 제거하는 함수가 아니라 앞뒤 공백을 모두 제거한다는 점을 알고 사용해야 합니다.

알고리즘 설계

각 위치의 문자를 current라고 두면, current === current.toUpperCase()인지 비교해 대문자인지 판단할 수 있습니다. 대문자라면 결과에는 current.toLowerCase()를 붙이고, 소문자라면 current.toUpperCase()를 붙입니다.

각 문자를 한 번씩 바꾸면 되므로 이전 문자의 변환 결과를 다시 살펴볼 필요는 없습니다.

대문자 찾기에서 익힌 문자 판별에 두 변환 메서드를 연결합니다. 바뀐 문자는 answer에 차례대로 붙입니다.

JavaScript 풀이

아래 코드를 solution.js에 저장한 뒤 터미널에서 echo StuDY | node solution.js로 예제 입력을 전달하면 sTUdy가 출력됩니다.

const fs = require("fs");

const input = fs.readFileSync(0, "utf8").trim();

let answer = "";

for (let i = 0; i < input.length; i++) {
  const current = input[i];

  if (current === current.toUpperCase()) {
    answer += current.toLowerCase();
  } else {
    answer += current.toUpperCase();
  }
}

console.log(answer);

입력은 input에 저장하고, 변환 결과는 answer에 누적합니다. 반복이 끝나면 완성된 문자열만 console.log()로 출력합니다.

현재 문자 추가되는 문자 누적 결과
S s s
t T sT
u U sTU
D d sTUd
Y y sTUdy

위 표는 공식 예제 입력 StuDY가 출력 sTUdy로 바뀌는 과정을 보여줍니다. 각 문자가 반대 대소문자로 한 번씩 변환되는지만 확인하면 됩니다.

복잡도와 검증

문자열 길이를 N이라 하면 문자 판별·변환은 N번입니다. 아래 시간 복잡도는 문자열 누적이 효율적으로 처리되는 일반적인 풀이 기준이며, 반복 연결 비용은 JavaScript 엔진 구현에 따라 달라질 수 있습니다. 입력이 100자 이하인 이 문제에서는 충분합니다.

항목 내용
시간 복잡도 O(N), 각 문자를 한 번씩 확인합니다.
입력 저장 공간 O(N), 입력 문자열 input을 저장합니다.
추가 결과 공간 O(N), 결과 문자열 answer를 만듭니다.
trim() 주의 앞뒤 공백을 모두 제거하므로, 공백 자체가 의미 있는 문제에서는 사용 여부를 다시 판단해야 합니다.

예제와 경계값은 실제 코드로 실행해 확인했습니다. 공식 예제는 LF와 CRLF 입력에서 모두 sTUdy를 출력했고, 모두 대문자·모두 소문자·혼합 문자열·길이 100 입력도 기대값과 일치했습니다.

검증 후보 확인할 점
길이가 짧은 문자열 반복문이 첫 문자부터 마지막 문자까지 빠짐없이 처리하는지 봅니다.
모두 대문자인 문자열 모든 문자가 toLowerCase() 결과로 누적되는지 확인합니다.
모두 소문자인 문자열 모든 문자가 toUpperCase() 결과로 누적되는지 확인합니다.
대소문자가 섞인 문자열 각 위치의 문자가 독립적으로 반대 대소문자로 바뀌는지 확인합니다.

인덱스로 한 글자씩 읽는 과정이 낯설다면 문자 찾기: 문자열 순회로 개수 세기에서 반복 흐름을 먼저 복습해 보세요.

대소문자 변환 흐름을 표현한 추상 도형 이미지
대문자와 소문자 변환 개념
문자 데이터를 순서대로 변환하는 과정을 표현한 추상 이미지
입력 문자를 순서대로 변환하는 흐름

풀이 전에 확인할 순서

  1. 입력값과 출력값을 한 문장으로 다시 적습니다.
  2. 반복할 대상과 비교·저장할 값을 정합니다.
  3. 필요한 자료구조와 시간복잡도를 예상합니다.
  4. 코드를 보기 전에 손으로 작은 예제를 계산합니다.
힌트: 대소문자 변환 JavaScript 풀이

정답 코드를 바로 따라 쓰기보다, 본문에서 값이 갱신되는 조건과 반복 범위를 먼저 찾으세요. 반복 한 번마다 반드시 유지되어야 하는 값이 무엇인지 적으면 풀이의 중심 변수를 고르기 쉽습니다.

테스트 확인

  • 가능한 가장 작은 입력
  • 같은 값이나 문자가 반복되는 입력
  • 정답이 처음 또는 마지막 위치에서 결정되는 입력
  • 입력 제한에 가까운 경우의 실행 시간

확인 결과: 본문의 예제뿐 아니라 위 경계 사례에서도 예상값과 실제 출력이 같아야 풀이가 완료됩니다.

이 글이 도움이 되었나요?

조회 중

코딩테스트 JavaScript 학습 순서

필수 49개 · 전체 49개

읽음 기록 관리

전체 과정 목차 (49개)
  1. 필수 길잡이 · 코딩테스트 JS 자료구조 로드맵: 배열, 해시, 스택, 투 포인터 순서
  2. 필수 학습 · 세 수 중 최솟값 JavaScript 조건문 풀이 정리
  3. 필수 학습 · 삼각형 판별하기 JavaScript 풀이
  4. 필수 학습 · 연필 개수 JavaScript 풀이
  5. 필수 학습 · 1부터 N까지 합 출력하기 JavaScript 풀이
  6. 필수 학습 · 최솟값 구하기 JavaScript 풀이|배열 순회와 비교 갱신 원리
  7. 필수 학습 · 홀수 JavaScript 풀이: 조건 판별과 결과 처리 정리
  8. 필수 학습 · 10부제 JavaScript 풀이: 끝자리 비교로 위반 차량 수 세기
  9. 필수 학습 · A를 #으로 JavaScript 풀이: 문자열 순회와 치환
  10. 필수 학습 · 문자 찾기 JavaScript 풀이: 문자열 순회로 개수 세기
  11. 필수 학습 · 대문자 찾기 JavaScript 풀이
  12. 필수 학습 · 대문자로 통일 JavaScript 풀이
  13. 필수 학습 · 대소문자 변환 JavaScript 풀이 현재 글
  14. 필수 학습 · 일곱 난쟁이 JavaScript 풀이: 두 명을 제외하는 완전탐색
  15. 필수 학습 · 코딩테스트 JS Map 풀이: 학급 회장 득표수 세기
  16. 필수 학습 · 코딩테스트 JS 스택 풀이: 올바른 괄호 검증하기
  17. 필수 학습 · 코딩테스트 JS 스택 풀이: 괄호문자 제거하기
  18. 필수 학습 · 코딩테스트 JS 스택 풀이: 크레인 인형뽑기 처리법
  19. 필수 학습 · 코딩테스트 JS 스택 풀이: 후위식 연산 계산하기
  20. 필수 학습 · 코딩테스트 JS 스택 풀이: 쇠막대기 레이저 절단 개수 세기
  21. 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 두 정렬 배열 합치기
  22. 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 공통 원소 추출하기
  23. 필수 학습 · 코딩테스트 JS 슬라이딩 윈도우 풀이: 최대 매출 구간 합 계산하기
  24. 필수 학습 · JavaScript 투 포인터: 합이 M인 연속 부분수열 개수
  25. 필수 학습 · 코딩테스트 JS 해시 풀이: 모든 아나그램 찾기
  26. 필수 학습 · 가장 긴 문자열 JavaScript 풀이
  27. 필수 학습 · 가운데 문자 출력 JavaScript 풀이
  28. 필수 학습 · 중복문자제거 JavaScript 풀이
  29. 필수 학습 · 코딩테스트 JS 고급: 최소 힙으로 다익스트라 최단 경로 구하기
  30. 필수 학습 · 코딩테스트 JS Union-Find: 연결 성분 수와 크기 구하기
  31. 필수 학습 · 코딩테스트 JS Trie: 접두사에 맞는 단어 수 세기
  32. 필수 학습 · 코딩테스트 JS Fenwick Tree: 값 갱신과 구간 합 처리
  33. 필수 학습 · 코딩테스트 JS 세그먼트 트리: 단일 대입과 구간 합
  34. 필수 학습 · 코딩테스트 JS LRU 캐시: 지도 타일 재사용 기록
  35. 필수 학습 · 코딩테스트 JS AVL 트리: 기준 이상 최솟값 찾기
  36. 필수 학습 · 코딩테스트 JS 큐: 상담 창구 대기열 명령 처리
  37. 필수 학습 · 코딩테스트 JS 연결 리스트: 재생 대기 목록 관리
  38. 필수 학습 · JavaScript 원형 덱 연습: 최근 기록 창과 되돌리기
  39. 필수 학습 · JavaScript 해시 테이블 연습: 정규화 문자열 빈도와 등장 순서
  40. 필수 학습 · JavaScript 트리 순회 연습: 깊이별 노드 묶기
  41. 필수 학습 · JavaScript BST 연습: 닫힌 구간의 중복 키 보고서
  42. 필수 학습 · JavaScript 최소 힙 연습: 동률 순서를 지키는 작업 스케줄러
  43. 필수 학습 · JavaScript 그래프 연습: 연결 구역 크기를 작은 순서로 출력하기
  44. 필수 학습 · 중복단어제거 JavaScript 풀이
  45. 필수 학습 · TypeScript 이진 탐색 연습: 숫자 카드 존재 여부 확인
  46. 필수 학습 · 큰 수 출력하기 JavaScript 풀이
  47. 필수 학습 · 보이는 학생 JavaScript 풀이
  48. 필수 학습 · 가위바위보 JavaScript 풀이
  49. 필수 학습 · 점수계산 JavaScript 풀이

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기