알고리즘 공부 #14 : 문자열

hyeon·2022년 3월 8일
0

알고리즘 시작

목록 보기
12/18

문자열 메소드들

  1. indexOf("찾는문자") : 찾는 문자의 첫번째 index를 return 해준다. 찾지못하면 -1 return
  2. substring(index1,index2) :해당하는 인덱스 사이에 있는 문자를 string으로 return 해준다.(0,2)이면 ab까지
  3. split(";") : 지정한 문자로 나눠서 배열로 return 해준다.
    String[] ans= str.split(";") 이면
    ans[0], ans[1]… 이런식으로
  4. contains(str2) : 해당 문자열이 포함되어있는지 boolean으로 return해준다.

백준 3029 : 경고

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
	static int n,p,cnt=1;
	static String[] arr;
	static Scanner scan=new Scanner(System.in);
	static StringBuilder sb=new StringBuilder();
	
    public static void main(String[] args)  {
	 
     		String str=scan.next();
     		int index=str.indexOf(':');
     		int hour = Integer.parseInt(str.substring(0,index));
     		String tmp=str.substring(index+1,str.length());
     		int index2=tmp.indexOf(':');
 			int min=Integer.parseInt(tmp.substring(0,index2));
 			int sec=Integer.parseInt(tmp.substring(index2+1,tmp.length()));
 			
     		String str2=scan.next();
     		int index3=str.indexOf(':');
     		int hour2 = Integer.parseInt(str2.substring(0,index3));
     		String tmp2=str.substring(index3+1,str2.length());
     		int index4=tmp2.indexOf(':');
 			int min2=Integer.parseInt(tmp2.substring(0,index4));
 			int sec2=Integer.parseInt(tmp2.substring(index4+1,tmp2.length()));

// 			System.out.println(hour+" "+min+" "+sec);
// 			System.out.println(hour2+" "+min2+" "+sec2);
 			
 			int cal_h=hour2-hour;
 			int cal_m=min2-min;
 			int cal_s=sec2-sec;
 			
 			if(cal_s<0) {
 				cal_s+=60;
 				cal_m-=1;
 			}
 			if(cal_m<0) {
 				cal_m+=60;
 				cal_h-=1;
 			}
 			if(cal_h<0) {
 				cal_h+=24;
 			}

 			System.out.format("%02d:%02d:%02d",cal_h,cal_m,cal_s);
 			
    }
    	
    	
    
}

저번문제에서 split이 안먹혔었기때문에 이번에도 substring으로 했더니 엄청 복잡해졌고 뭔가 잘못됐는지 실패가 떴다.

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
	static int n,p,cnt=1;
	static String[] arr;
	static Scanner scan=new Scanner(System.in);
	static StringBuilder sb=new StringBuilder();
	
    public static void main(String[] args)  {
	 
     		String str=scan.next();
     		String str2=scan.next();
     		
     		int cal_h=Integer.parseInt(str2.split(":")[0])-Integer.parseInt(str.split(":")[0]);
     		int cal_m=Integer.parseInt(str2.split(":")[1])-Integer.parseInt(str.split(":")[1]);
     		int cal_s=Integer.parseInt(str2.split(":")[2])-Integer.parseInt(str.split(":")[2]);

 			
 			if(str.equals(str2)) {
 				System.out.print("24:00:00");
 				System.exit(0);
 			}
// 			System.out.println(hour+" "+min+" "+sec);
// 			System.out.println(hour2+" "+min2+" "+sec2);
 		 			
 			if(cal_s<0) {
 				cal_s+=60;
 				cal_m-=1;
 			}
 			if(cal_m<0) {
 				cal_m+=60;
 				cal_h-=1;
 			}
 			if(cal_h<0) {
 				cal_h+=24;
 			}

 			System.out.format("%02d:%02d:%02d",cal_h,cal_m,cal_s);
 			
    }
    	
    	
    
}

split을 사용해서 3줄로 줄일수있었고 시간이 같을 때 예외처리를 해주었다.

  1. split의 사용법을 아나요?
  2. System.exit(0) //정상종료
  3. System.out.format의 사용법을 아나요? 포매팅

백준 11720 : 숫자의 합

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
	static int n,p,cnt=0;
	static String[] arr;
	static Scanner scan=new Scanner(System.in);
	static StringBuilder sb=new StringBuilder();
	
    public static void main(String[] args)  {
     		n=scan.nextInt();
    		int arr[]=new int[n];	
     		String str=scan.next();
         		for(int j=0;j<n;j++) {
         			arr[j]=str.charAt(j)-'0';
         		}
         		for(int i=0;i<n;i++) {
         			cnt+=arr[i];
         		}
         		System.out.println(cnt);
 		
    }
    	
    	
    
}

다시볼필요 x

백준 11365 : !밀비 급일

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
	static int n,p,cnt=0;
	static String[] arr;
	static Scanner scan=new Scanner(System.in);
	static StringBuilder sb=new StringBuilder();
	
    public static void main(String[] args)  {
     		while(scan.hasNext()) {
     			String str=scan.nextLine();
     			if("END".equals(str)) break;
     			
     			sb.append(str);
     			System.out.println(sb.reverse());
     			sb.delete(0, sb.length());
     		}
 		
    }
    	
    	
    
}
  1. reverse를 사용할 수 있나요?
  2. string builder에 들어있는 것들을 삭제 할 수 있나요?

백준 16171 : 나는 친구가 적다 (Small)

import java.io.*;
import java.util.*;
public class Main {
	static int n,p;
	static String str;
	static Scanner scan=new Scanner(System.in);
	static StringBuilder sb=new StringBuilder();
	
    public static void main(String[] args)  {
    	
    	String arr="";
    	String find="";
    	String a="";
    	arr=scan.nextLine();
    	find=scan.nextLine();
    	
    	//숫자 빼내기 a: 숫자 빼낸 교과서 find : 찾는문자
    	for(int i=0;i<arr.length();i++) {
    		if('0'<=arr.charAt(i)&&arr.charAt(i)<='9') {
    				continue;
    		}
    		else {
    			a=a+arr.charAt(i);
    		}
    	}
    	if(a.contains(find)) {
    		System.out.print(1);
    	}
    	else {
    		System.out.print(0);
    	}
    	
    	
    }
}
  1. contains 의 사용법
  2. indexOf의 사용법
    출처블로그
profile
남기고 싶은 개발자입니다 :>

0개의 댓글