seaking110 님의 블로그
백준 1316번 그룹 단어 체커 본문
그룹 단어 체커

- 알파벳의 개수인 26개로 배열을 하나 잡고 이전 값과 현재 값이 다르면 이전 값에 해당하는 인덱스의 배열 값을 true로 변경
- 현재 값과 같으면 계속 진행
- 이미 true 인 경우엔 조건을 만족하지 않기 때문에 그룹 단어가 아님!
public class Main {
public static boolean[] arr = new boolean[3001];
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
int count = 0;
for(int j=0;j<n;j++) {
boolean flag = false;
String s = bf.readLine();
boolean alp[] = new boolean[26];
for(int i=1;i<s.length();i++) {
if(s.charAt(i)==s.charAt(i-1)) {
continue;
}
if(!alp[s.charAt(i-1)-97]) {
alp[s.charAt(i-1)-97] = true;
}
else {
flag = true;
break;
}
}
if(!flag && !alp[s.charAt(s.length()-1)-97]) {
count++;
}
}
System.out.println(count);
}
}
- 다 풀고 보니 flag 설정이 아니고 그냥 첫 값을 미리 alp 배열의 인덱스 값을 true 로 바꾸고 count 값을 n 값까지 늘려둔 뒤 조건을 만족하지 않으면 count 값에서 -1 하는 방식이 훨씬 더 깔끔했을거같다!
- 그래도 속도면에선 비슷했을듯!
https://school.programmers.co.kr/learn/courses/30/lessons/136798
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
추가적으로 프로그래머스 문제를 풀며 소수 여부에 대한 문제는 많이 풀어봤지만 약수의 개수를 구하는 문제는 처음봤는데 아주 좋은 코드를 발견했다.
int[] count = new int[number + 1];
for (int i = 1; i <= number; i++) {
for (int j = 1; j <= number / i; j++) {
count[i * j]++;
}
}
- 첫번째 for문에서 i 값을 1부터 number까지 증가시키고
- 두번째 for문에서 j 값을 1부터 number/i까지 증가시킨다
- num의 범위가 10까지라고 생각해보자
- i는 1 j도 1로 먼저 count[1]의 값이 +1 된다
- 10까지 반복되어 모든 count 배열의 값이 현재 1
- i 가 2라면 j는 1부터 5까지 2 4 6 8 10 의 값이 +1
- i가 3이라면 j는 1부터 3까지 3 6 9 의 값이 +1
- i가 4라면 j는 1부터 2까지 4 8의 값이 +1
- i가 5라면 j는 1부터 2까지 5 10의 값이 +1
- i가 6부터 10까지는 6부터 10까지의 모든 값이 +1
- 따라서 count 배열은 1,2,2,3,2,4,2,4,3,4 이 된다!
'오늘의 문제' 카테고리의 다른 글
| 1992번 퀴드트리 (0) | 2025.01.14 |
|---|---|
| 14889번 : 스타트와 링크 (1) | 2025.01.13 |
| 14888번 연산자 끼워넣기 (0) | 2025.01.09 |
| 9663번 N-Queen (0) | 2025.01.07 |
| N과 M (1) | 2025.01.06 |