본문 바로가기

코테 문제 풀어보기

[ 자바 ] - 코테 초심으로..

코테 공부를 시작한지 3주정도된거같다.

 

코테 준비하는 글을 찾아보고 아래 쓰신분이 풀어보라는 문제 위주로 풀어보고있엇다.

 

일단 속도는 신경쓰지지않고 문제푸는 연습부터 하고 있는데  생각보다 쉽지않고 , 응용이 잘되지 않는다.. 완전히 이해하고 푸는거같지도않고 ,  한두문제 풀어서 이해할수 있는 개념도 아닌거같아서  , 중간점검겸 다시 앞으로 돌아 가기로했다.. 

 

https://covenant.tistory.com/224

 

코딩테스트 대비를 위한 백준 문제 추천

코딩테스트 대비를 위한 백준 문제 추천 끝 없는 훈련만이 실전에서 흐트럼없이 정답을 향해서 움직일 수 있습니다. (Photo by Specna Arms on Unsplash) 작년 한 해 수많은 코딩테스트를 직접 경험하고

covenant.tistory.com

 

 

 

복습겸 해보는 것이니까 최대한 정답을 안찾아보고 풀어보려고한다.

 

일단 문자열부터 ..

 

 

https://www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한

www.acmicpc.net

 

 

문자를 입력해주는데 단어간 띄어쓰기는 1칸 고정이며  몇개에 단어가 있는지 찾는문제이다.

카카오 코딩테스트 문자열쪽에서 비슷한 유형을 봤던거같긴하다

 

 

 

 

import java.io.*;
import java.util.regex.*;



public class Main {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();

Pattern pattern = Pattern.compile("([a-zA-Z]+)");
Matcher matcher = pattern.matcher(s);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println(count);
}

}

 

 

 

두번쨰 문제는 생각보다 고민을 많이했다. 어떻게하면 효율적으로 짤수있을지도 고민해보았다.

 

일단 최근에 Comparable인터페이스를 사용하여 비교하는 것을 해보다보니 활용해보았다.

 

class 에 Comparable를 넣고 객체간 우선순위를 정할떄 int 값을 비교한다는 부분을 선언해놓으니

 

Arraylist 에 객체가 들어가도 Collections.sort 를 사용할 수 있었다. Comparable이 없으면 sort안됨 

 

https://www.acmicpc.net/problem/1157

 

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

 

package com.myproject.CodeTest;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;



public class Main {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
s=s.toUpperCase();
int length = s.length();
ArrayList<Edge> arr = new ArrayList<>();

while(length!=0) {
char c = s.charAt(0);
s = s.replaceAll(c+"", "");
arr.add(new Edge(c+"",length-s.length()));
length=s.length();
}

Collections.sort(arr);
if(arr.size()==1) {
System.out.println(arr.get(arr.size()-1).s);
}else {
if(arr.get(arr.size()-1).i==arr.get(arr.size()-2).i) System.out.println("?");
else System.out.println(arr.get(arr.size()-1).s);
}

}

}

class Edge implements Comparable<Edge>{
public String s;
public int i;
Edge(String s ,int i){
this.s=s;
this.i=i;
}

@Override

public int compareTo(Edge o) {
return Integer.compare(i, o.i);
}
}

 

 

 

이렇게해서 문자열은 거의다 풀어보았다. (거의 같은문제는 제외 )