목차
▸ 문자열 나누기
▸ 대충 만든 자판
▸ 둘만의 암호
출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 문자열 나누기
[오답 코드]
import java.util.List;
import java.util.ArrayList;
class Solution {
public int solution(String s) {
int answer = 0;
int xCnt = 1;
int notxCnt = 0;
char[] charArray = s.toCharArray();
char x = charArray[0];
int i = 0;
while(true){
i++;
if(i==charArray.length){
break;
}
if(x == charArray[i]){
xCnt++;
}else if(x != charArray[i]){
notxCnt++;
}
if(xCnt==notxCnt){
answer++;
i++;
if(i==charArray.length){
break;
}else if(i==charArray.length-1){
answer++;
}
x = charArray[i];
xCnt = 1;
notxCnt = 0;
}
}
return answer;
}
}
[수정 코드]
class Solution {
public int solution(String s) {
int answer = 0;
int xcnt = 0;
int notx = 0;
char x = s.charAt(0);
for(int i = 0; i < s.length(); i++){
if(xcnt == notx){
answer++;
x = s.charAt(i);
}
if(x == s.charAt(i)){
xcnt++;
}else if(x != s.charAt(i)){
notx++;
}
}
return answer;
}
}
출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 대충 만든 자판
[오답 코드]
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
Map<Character, Integer> map = new HashMap<>();
int[] answers = new int[targets.length];
for(int i = 0; i < keymap.length; i++){
String first = keymap[i];
for(int j = 0; j < first.length(); j++){
char c = first.charAt(j);
if(map.containsKey(c)){
int inx = map.get(c);
map.put(c, Math.min(inx, j+1));
}else{
map.put(c, j+1);
}
}
}
for(int i = 0; i < targets.length; i++){
int answer = 0;
String target = targets[i];
for(int j = 0; j < target.length(); j++){
char c = target.charAt(j);
if(map.containsKey(c)){
answer += map.get(c);
}
}
if(answer > 0){
answers[i] = answer;
} else if(answer == 0){
answers[i] = -1;
}
}
return answers;
}
}
[수정 코드]
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
Map<Character, Integer> map = new HashMap<>();
int[] answers = new int[targets.length];
for(int i = 0; i < keymap.length; i++){
String first = keymap[i];
for(int j = 0; j < first.length(); j++){
char c = first.charAt(j);
if(map.containsKey(c)){
int inx = map.get(c);
map.put(c, Math.min(inx, j+1));
}else{
map.put(c, j+1);
}
}
}
for(int i = 0; i < targets.length; i++){
int answer = 0;
boolean noanswer = false;
String target = targets[i];
for(char c: target.toCharArray()){
if(map.containsKey(c)){
answer += map.get(c);
}else{
noanswer = true;
break;
}
}
answers[i] = noanswer ? -1 : answer;
}
return answers;
}
}
출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 둘만의 암호
import java.util.List;
import java.util.ArrayList;
class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
List<Character> alphabet = new ArrayList<>();
//초기 알파벳 리스트 세팅
for(char c = 'a'; c <= 'z'; c++){
alphabet.add(c);
}
//skip 알파벳 삭제
for(char c : skip.toCharArray()){
int inx = alphabet.indexOf(c);
alphabet.remove(inx);
}
int length = alphabet.size();
//문자열 만들기
for(char c : s.toCharArray()){
int inx = alphabet.indexOf(c);
inx += index;
answer += String.valueOf(alphabet.get(inx%length));
}
return answer;
}
}