일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- go 환경변수
- go 대기그룹
- clean architecture middleware
- go channel
- 골랑 고퍼
- 개발자
- gin recovery
- go
- go 마스코트
- go air 환경변수
- go 맥
- 좀비고루틴
- go air
- go 패닉
- go clean architecture
- gopath 환경변수
- go 캐릭터
- gin middleware
- gin logger
- go panic
- go 맥 air 환경변수
- golang gopher
- 신입개발자
- 고루틴 채널
- git
- go recover
- air 환경변수
- go 맥 air
- go middleware
- go디자인패턴
- Today
- Total
뽀미의 개발노트
인프런 1-2. 대소문자 변환 (자바) 본문
[문제]
대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.
[입력]
첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.
문자열은 영어 알파벳으로만 구성되어 있습니다.
[출력]
첫 줄에 대문자는 소문자로, 소문자는 대문자로 변환된 문자열을 출력합니다.
[문제 해결 과정]
이거는 아까 했던거랑 비슷할 것 같다!
아까 검색했을때 대소문자 변환하는거 말고도 대문자인지 소문자인지
확인하는 함수도 있었던 것 같은데 그냥 향상된 반복문으로
반복문 돌려서 대문자면 소문자로, 소문자면 대문자로 바꾸면 되는거 아닌가??
1. 문자열을 입력받는다.
2. 그 문자열을 배열에 담아 반복문을 돌린다.
3. 문자 하나하나 isUpperCase()로 대문자인지 확인하고
맞으면 toLowerCase()로 소문자로 바꾼다!
반대는 반대로 해주면 됨.
근데 저건 다 String에 쓰는 함수들임..
char에 쓰려면 Character.toLowerCase(단어)이렇게 써줘야함..
그리고 바꾼 단어로 넣었다고 해도
str을 출력해도 그렇고 str.toCharArray()를 출력해도 그렇고
안 바뀐 문자열이 나옴
그래서 미리 arraylist를 생성하고
대 -> 소 또는 소 -> 대로 문자 변환한후 그 리스트에 담겠음.
그리고 리스트를 그냥 출력하면 대괄호도 있고 문자가 쉼표로 구분되서 나오므로
리스트 안에 있는걸 문자열로 합쳐서 출력해야함!!
그래서 StringBuilder를 이용해서 향상된 for문에서 리스트속 문자 하나한
스트링빌더로 이어붙여줬음!!
[처음으로 풀어서 통과한 코드]
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
List<Character> arr = new ArrayList<>(); // 변환한 char 담을 리스트
for(char x : str.toCharArray()) {
if(Character.isUpperCase(x)) {
x = Character.toLowerCase(x);
} else {
x = Character.toUpperCase(x);
}
arr.add(x);
// 변환한 뒤 리스트에 담기
}
StringBuilder sb = new StringBuilder(); // 스트링빌더 이용
for(Character ch : arr) {
sb.append(ch); // 리스트 속 char를 하나의 문자열로 엮기
}
System.out.println(sb.toString());
}
}
강의 듣고 난후
그냥 String answer = ""라고 한 후
문자 변환 한후 answer에다가 더해주기만 하면 되는 거였음!!!;;;
[스트링빌더 말고 그냥 단순 덧셈;;;으로 하면 훨씬 나음]
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String answer = "";
for(char x : str.toCharArray()) {
if(Character.isUpperCase(x)) {
answer += Character.toLowerCase(x);
} else {
answer += Character.toUpperCase(x);
}
}
System.out.println(answer);
}
}
또한 아스키코드로 할 수도 있음!
대문자는 65 ~ 90
소문자는 97 ~ 122
둘의 차이는 32가 남!!
char는 뭐 숫자로 변환하고 할 것도 없이 그냥 바로
x가 65와 90 사이면~ 이라고 숫자처럼 비교해주면 대문자라고 알아먹음.
그래서 대문자면 32를 더해주고 소문자면 32를 빼줬는데
그럼 결과값은 숫자로 나와버림!!!
그럼 그냥 앞에다가 (char)만 붙여주면 됨!!
[아스키코드 사용]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String answer = "";
for(char x : str.toCharArray()) {
if(x >= 65 && x <= 90) {
answer += (char)(x+32);
// 65~90 사이면 대문자
// 대문자에 32를 더하면 소문자됨
// 숫자를 다시 문자로 형변환 해줘야됨
} else {
answer += (char)(x-32);
}
}
System.out.println(answer);
}
}
[후기]
겅부하기 싫어서 그냥 쉬운 문자열 문제 푸는중..(근데 그마저도 그렇게 쉽지도 않음;;) 일요일에 또 코테라 얼른 어려운것도 공부해야 하는데.. 귀찬타.. 내일의 나한테 맡겨야징!
'Algorithm_Test' 카테고리의 다른 글
인프런 2-2. 보이는 학생 (자바) (0) | 2023.09.06 |
---|---|
인프런 2-1. 큰 수 출력하기 (자바) (0) | 2023.09.05 |
인프런 1-1. 문자 찾기 (자바) (0) | 2023.09.04 |
인프런 8-3. 최대점수 구하기 (자바) (0) | 2023.09.01 |
인프런 8-1. 합이 같은 부분집합 (자바) (0) | 2023.08.29 |