일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 air 환경변수
- go 환경변수
- go디자인패턴
- go middleware
- gopath 환경변수
- 신입개발자
- go 마스코트
- gin middleware
- clean architecture middleware
- gin recovery
- go 맥 air
- gin logger
- 개발자
- golang gopher
- go air
- go 맥
- go 맥 air 환경변수
- 좀비고루틴
- go channel
- go panic
- go recover
- 고루틴 채널
- go
- go 대기그룹
- 골랑 고퍼
- go 캐릭터
- go 패닉
- go clean architecture
- git
- air 환경변수
- Today
- Total
뽀미의 개발노트
인프런 1-1. 문자 찾기 (자바) 본문
[문제]
한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성하세요.
대소문자를 구분하지 않습니다.문자열의 길이는 100을 넘지 않습니다.
[입력]
첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어진다.
문자열은 영어 알파벳으로만 구성되어 있습니다.
[출력]
첫 줄에 해당 문자의 개수를 출력한다.
[문제 풀이 과정]
문자열을 입력받으면 걔의 길이를 바로 알 수 있던가??
아하 쩜 렝스로 길이 바로 알 수 있음!!! 그럼 그 입력받은 문자의 길이만큼
반복문을 돌면서... 두번째 줄에 있는 문자랑 똑같은 애가 나오는지
하나하나 비교해봐야겠다!!
그리고 string이니까 ==으로 비교하면 안되던가? 쩜 이퀄스였던 것 같다.
근데 그럼 맨 처음 입력받았던 문자열에서
문자 하나하나씩 떼어서 배열에 넣어야 하는데.. 그걸 어떻게 하더라
split 이런걸로 하는 거였나?
charAt()이라는 함수로 하나하나 떼어서 배열에 넣어주자!!
근데 그렇게 하려면 반복문을 또 돌려줘야되는데
그냥 toCharArray()라는 함수 사용하면 바로 문자열을 배열로 변환해준다!!
1. 맨 첫줄의 문자열 str을 입력받는다.
2. char[] arr = str.toCharArray();로 배열로 저장한다.
3. 두번째 줄의 문자 char를 입력받는다.
4. arr의 길이만큼 반복문을 돌면서 char와 equal한게 있으면은
answer를 ++해준다.
5. 마지막에 나온 answer를 출력하면 끝!!
여기까지 7분 30초 걸림
처음 낸 코드 오류남. 왜냐하면 대소문자를 구별하지 않는다는
제한 조건을 제대로 안 봤기 때문^^ 하핫
암튼 그래서 그냥 문자열도 다 대문자로 바꿔버리고
문자도 다 대문자로 바꿔서 비교하는 걸로 함!! 대문자로 바꿔버리는 함수는 toUpperCase임. 그랬더니 통과됨...
풀고 통과 받는데 19분 걸림. 개 오래 걸리넹...
[처음 풀어서 통과받은 코드]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine().toUpperCase(); // 문자열 입력받아서 대문자로 다 바꾸기
char[] arr = str.toCharArray(); // 문자열을 배열로
char alphabet = sc.next().toUpperCase().charAt(0);
// String으로 입력받아서 대문자로 바꾸고 char로 변환
int answer = 0;
for(int i = 0 ; i < arr.length ; i++) {
if(alphabet==arr[i]) {
answer++;
// 문자열 안의 알파벳과 문자가 똑같으면
// 갯수 하나씩 증가
}
}
System.out.println(answer);
}
}
여기서 헷갈려서 찾아봤었던 점은 바로 char는 바로 입력받는 함수가 없어서 일단 next로 String으로 입력받고 .charAt(0)을 이용해서 char로 변환해야 한다는것? 그리고 string은 .equals로 비교해야되지만 char는 ==으로 비교할 수 있다는것? 어휴 이거 인터넷 검색 안 되는 코테에서는 어뜩허냐..?
근데 꼭 처음 입력받은 문자열을 저렇게 배열로 바꿔줄 필요는 없었고, 다른 방식으로 해도 된다. 예를 들어
String str = sc.nextLine().toUpperCase(); // 문자열 입력받아서 대문자로 다 바꾸기
char alphabet = sc.next().toUpperCase().charAt(0);
// String으로 입력받아서 대문자로 바꾸고 char로 변환
for(char x : str.toCharArray()) {
if(alphabet == x) {
answer++;
// 문자열 안의 알파벳과 문자가 똑같으면
// 갯수 하나씩 증가
}
}
이런 식으로 향상된 for문 안에서 바로 문자열의 문자를 배열로 바꾼다음에 거기서 하나씩 꺼내서 주어진 알파벳과 비교하는 방법이 있다. 아니면
String str = sc.nextLine().toUpperCase(); // 문자열 입력받아서 대문자로 다 바꾸기
char alphabet = sc.next().toUpperCase().charAt(0);
// String으로 입력받아서 대문자로 바꾸고 char로 변환
for(int i = 0 ; i < str.length() ; i++) {
if(alphabet==str.charAt(i)) {
answer++;
// 문자열 안의 알파벳과 문자가 똑같으면
// 갯수 하나씩 증가
}
}
이런 식으로 str을 그때그때 문자열 안의 char로 바꿔서 비교하는 방법이 있다.
'Algorithm_Test' 카테고리의 다른 글
인프런 2-1. 큰 수 출력하기 (자바) (0) | 2023.09.05 |
---|---|
인프런 1-2. 대소문자 변환 (자바) (0) | 2023.09.04 |
인프런 8-3. 최대점수 구하기 (자바) (0) | 2023.09.01 |
인프런 8-1. 합이 같은 부분집합 (자바) (0) | 2023.08.29 |
인프런 9-2. 회의실 배정 (자바) (0) | 2023.08.28 |